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

ListView: Try showing blocks that are dragged (no longer hide them) #51724

Merged
merged 7 commits into from
Jun 23, 2023

Conversation

andrewserong
Copy link
Contributor

@andrewserong andrewserong commented Jun 21, 2023

What?

This PR explores an idea from @jameskoster in #49563 (comment) to try displaying blocks in the list view that are dragged.

❓ Note: this is an experimental PR exploring an idea — I'm not too sure what I think of it all up, so happy to either pursue it or close it, either way 😃

Why?

To see whether this results in less of a jump or friction while using the lift view drag and drop.

How?

  • Remove the display: none rule for dragged blocks in the list view
  • Ensure that children of dragged blocks continue to render
  • Override hover styles while dragging blocks so that hover styles don't erroneously appear while dragging / scrolling the list view

Testing Instructions

With some nested blocks in a post or template, try dragging around some expanded blocks. You should see that the block you're dragging is no longer hidden.

How does it feel? Especially when dragging a big selection — is it easier, or harder with the blocks displayed?

Note: if we like this approach, we might need to adjust some styling in other places the list view is used (e.g. in Navigation in browse mode, where currently the opacity rule doesn't change much)

Screenshots or screencast

Here's a screengrab of a bit of drag and dropping to see how it might feel:

2023-06-21.17.02.55.mp4

@andrewserong andrewserong added [Type] Enhancement A suggestion for improvement. [Feature] Drag and Drop Drag and drop functionality when working with blocks [Feature] List View Menu item in the top toolbar to select blocks from a list of links. labels Jun 21, 2023
@andrewserong andrewserong self-assigned this Jun 21, 2023
@jasmussen
Copy link
Contributor

Could work.

@github-actions
Copy link

github-actions bot commented Jun 21, 2023

Size Change: +9 B (0%)

Total Size: 1.42 MB

Filename Size Change
build/block-editor/index.min.js 198 kB +29 B (0%)
build/block-editor/style-rtl.css 14.9 kB -10 B (0%)
build/block-editor/style.css 14.9 kB -10 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.69 kB
build/api-fetch/index.min.js 2.28 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 451 B
build/block-directory/index.min.js 6.99 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.22 kB
build/block-editor/content.css 4.22 kB
build/block-editor/default-editor-styles-rtl.css 381 B
build/block-editor/default-editor-styles.css 381 B
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 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 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 1.34 kB
build/block-library/blocks/image/style-rtl.css 1.34 kB
build/block-library/blocks/image/style.css 1.34 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.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/interactivity.min.js 978 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.78 kB
build/block-library/blocks/navigation/view.min.js 438 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 314 B
build/block-library/blocks/post-template/style.css 314 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 587 B
build/block-library/blocks/search/style.css 584 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 531 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.43 kB
build/block-library/blocks/social-links/style.css 1.42 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/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 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 199 kB
build/block-library/interactivity/runtime.min.js 2.69 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.5 kB
build/block-library/style.css 13.5 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.87 kB
build/blocks/index.min.js 50.9 kB
build/commands/index.min.js 14.9 kB
build/commands/style-rtl.css 827 B
build/commands/style.css 827 B
build/components/index.min.js 240 kB
build/components/style-rtl.css 11.8 kB
build/components/style.css 11.8 kB
build/compose/index.min.js 12 kB
build/core-commands/index.min.js 2.12 kB
build/core-data/index.min.js 15.7 kB
build/customize-widgets/index.min.js 11.9 kB
build/customize-widgets/style-rtl.css 1.46 kB
build/customize-widgets/style.css 1.45 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 8.25 kB
build/date/index.min.js 40.4 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.63 kB
build/edit-post/classic-rtl.css 544 B
build/edit-post/classic.css 545 B
build/edit-post/index.min.js 33.9 kB
build/edit-post/style-rtl.css 7.58 kB
build/edit-post/style.css 7.57 kB
build/edit-site/index.min.js 80.1 kB
build/edit-site/style-rtl.css 12.2 kB
build/edit-site/style.css 12.2 kB
build/edit-widgets/index.min.js 16.8 kB
build/edit-widgets/style-rtl.css 4.53 kB
build/edit-widgets/style.css 4.53 kB
build/editor/index.min.js 44.6 kB
build/editor/style-rtl.css 3.58 kB
build/editor/style.css 3.58 kB
build/element/index.min.js 4.8 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 7.63 kB
build/format-library/style-rtl.css 554 B
build/format-library/style.css 553 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.64 kB
build/keycodes/index.min.js 1.84 kB
build/list-reusable-blocks/index.min.js 2.13 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.9 kB
build/notices/index.min.js 948 B
build/plugins/index.min.js 1.77 kB
build/preferences-persistence/index.min.js 1.84 kB
build/preferences/index.min.js 1.24 kB
build/primitives/index.min.js 943 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 939 B
build/react-i18n/index.min.js 615 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.7 kB
build/reusable-blocks/index.min.js 2.38 kB
build/reusable-blocks/style-rtl.css 243 B
build/reusable-blocks/style.css 243 B
build/rich-text/index.min.js 10.7 kB
build/router/index.min.js 1.77 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 1.42 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.57 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 958 B
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.16 kB
build/widgets/style-rtl.css 1.15 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

@jameskoster
Copy link
Contributor

Obviously I'm biased but this makes dragging/dropping in list view feel much easier and more predictable.

One detail we might consider is removing the dark 'chip' that appears on drag. I may be mistaken, but I think this was added as a way to keep track of which block you've picked up. But since it no longer disappears on drag, perhaps it's not necessary?

@richtabor
Copy link
Member

One detail we might consider is removing the dark 'chip' that appears on drag.

I still like having the chip, as you can drag it onto the edit area and drop the block elsewhere. It's still nice to have that little reference.

@richtabor
Copy link
Member

richtabor commented Jun 21, 2023

I think this works alright.

Probably don't need the opacity applied when dragging though; it's a bit smoother without. cc @WordPress/gutenberg-design

With opacity (current PR):

CleanShot.2023-06-21.at.12.20.49.mp4

Without opacity:

CleanShot.2023-06-21.at.12.23.58.mp4

@apeatling
Copy link
Contributor

I think this is an improvement, although could obviously be further iterated on. The jump when you drag something out right now is disorienting, especially with a long list where you need to drag up or down further.

@ramonjd
Copy link
Member

ramonjd commented Jun 22, 2023

Thanks for trying this out!

I tested and works as described.

Opacity is, I think, GPU accelerated and probably the better choice but I did notice a slight lag (nanoseconds on large lists). Chrome says its repainting at regular intervals, but it's pretty miniscule.

For large lists, the opacity effect doesn't make much of a difference because when I scroll up and down I don't see the target element anyway.

@andrewserong andrewserong changed the title ListView: Try showing blocks that are dragged (no longer hide them), but with lower opacity ListView: Try showing blocks that are dragged (no longer hide them) Jun 22, 2023
@andrewserong
Copy link
Contributor Author

andrewserong commented Jun 22, 2023

Update: I've tried out removing the opacity style, and also fixed a subtle issue where hover styles were appearing erroneously while dragging blocks. This appears to be an issue in Chrome where the hover state isn't updating while dragging the list view — the workaround is to hide/override the hover styles while dragging, which seems to be consistent with feedback on #49563 (comment) from @richtabor about removing the accent color.

Here's a before / after of the hover color to show what I mean. Note how in the before GIF, the blue accent color appears to be stuck over the top block while dragging down the list. In the after GIF, there's no stuck accent color:

Before (trunk) After (this PR)
2023-06-22 12 25 02 2023-06-22 12 43 27

I think this is probably in a good state for a final review. If any designers are happy with it / want to give it an approving review, I think we should just have enough time to merge this one in for 6.3 before the GB 16.1 RC gets pushed tomorrow, if I merge this first thing Friday my time.

If anyone has any concerns about the PR, though, I'm happy to skip it for 6.3 and we can do more rounds of list view improvements targeting 6.4 instead.

Thanks again for all the reviews and testing! 🙇

@github-actions
Copy link

github-actions bot commented Jun 22, 2023

Flaky tests detected in c862187a691c460f445d7192adcd02ec116cf640.
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/5351688922
📝 Reported issues:

@andrewserong andrewserong force-pushed the try/adjust-list-view-drag-styling branch from d27ef7a to 48b64e1 Compare June 22, 2023 03:57
@talldan
Copy link
Contributor

talldan commented Jun 22, 2023

I think this is a good improvement, and makes it more closely match how dragging works in the canvas.

I personally quite liked the opacity 😄

One part that seems confusing is that the drop indicator makes it seem like you can drop a parent as a child of itself:

Kapture.2023-06-22.at.12.47.13.mp4

@andrewserong
Copy link
Contributor Author

andrewserong commented Jun 22, 2023

I personally quite liked the opacity 😄

Same... happy to go with whatever the consensus winds up being, though!

One part that seems confusing is that the drop indicator makes it seem like you can drop a parent as a child of itself:

Oh, good catch. I see in the useListViewDropZone hook, the logic doesn't iterate into nested blocks of the dragged clientIds (because previously we didn't have any within the markup to worry about). I'll have a play around, but I suspect it might need a few tweaks to get working properly, which might not be very quick to figure out. Will see how I go!

@andrewserong
Copy link
Contributor Author

andrewserong commented Jun 22, 2023

Another update: I've added the 0.5 opacity rule back in.

After a little more digging, I think re-instating the opacity rule could largely mitigate the potential confusion surrounding dropping to a child of the dragged block. Also, it makes it much clearer if you're dragging part of a nested tree as to which part of that tree you've started dragging. Overall, the problem of dragging parts of the tree leans me toward the idea that we need to visually flag the blocks that are being dragged (and the opacity rule seems the easiest way to do that for now). Here's an example of dragging from part of a tree, where it's clearer:

2023-06-22.15.36.53.mp4

Some thoughts:

  • In the above screengrab, dragging to within the dragged block's tree and letting go results in no drag happening — but to me it doesn't feel so bad that the drop indicator line is rendered, because the blocks are greyed out. So, it doesn't feel like so much of a surprise when nothing happens.
  • If we attempted to explore an alternative for the drop indicator line within nested dragged blocks (like, flick the line to be beneath the nested dragged blocks), I think that'll likely feel flakier as the drop indicator line will be flicking around further from the mouse cursor.
  • With opacity set for the dragged blocks, when I finally drag the intended part of the tree out of the top area of the list, it's much clearer which blocks will be moved.

As always, happy for any feedback, but I think the current shape of this PR could make for a decent next step for the drag behaviour.

@jameskoster
Copy link
Contributor

In the above screengrab, dragging to within the dragged block's tree and letting go results in no drag happening — but to me it doesn't feel so bad that the drop indicator line is rendered, because the blocks are greyed out. So, it doesn't feel like so much of a surprise when nothing happens.

I think that's a good observation, and I agree. Ideally we'd still iterate (probably makes sense to just hide the indicator and set cursor: no-drop; when dragging a block inside itself), but it would be okay to handle that in a follow-up.

@richtabor
Copy link
Member

I still think opacity isn't needed, perhaps even a bit distracting. Figma, a number of MacOS experiences maintain the selected state until moved (no opacity change).

One part that seems confusing is that the drop indicator makes it seem like you can drop a parent as a child of itself

A valid concern, but opacity shifting doesn't resolve this. Not showing the drop indicator in a dragged item would prevent the UI from indicating you can drop it in itself.

@jasmussen
Copy link
Contributor

I softly lean towards no opacity change.

@apeatling
Copy link
Contributor

I think it's a good change with or without the opacity. 😎

@andrewserong
Copy link
Contributor Author

Another update: I've come up with a fairly simple fix for the issue of dragging within nested blocks by looking up whether or not the is-dragging classname is attached. On balance, I think the current state (including opacity) is about my favourite so far. Here's how it looks when dragging over nested blocks within the set of dragged blocks:

2023-06-23.10.26.39.mp4

In this screengrab, the whole area of dragged blocks is effectively treated like it's one big list view item, and the flicking of the drop indicator to the top and bottom is supported by the dragged blocks being visually indicated that they're the ones being dragged (via opacity). While this is different behaviour to file systems like MacOS, there's some similarity with dragging items in Github projects, where you're always dragging selected tiles, so they're highlighted when they're dragged. With the list view, we have a bit of a challenge because of the difference between selected blocks and dragged blocks, which is conceptually different to both file systems and things like Github projects. For that reason, I think it's okay that what happens in the List View differs a little from interfaces in other products.

If there's still time to land this PR prior to the feature freeze for 6.3, I think I'd lean toward merging in its current shape, even if we don't have agreement over whether or not to keep the opacity rule.

Thanks again for all the feedback and input, everyone!

@richtabor
Copy link
Member

richtabor commented Jun 23, 2023

I’m for getting it in, minus the opacity.

It just has a couple unrefined edges (the white border on the drop indicator shows awkwardly alongside the opacity, the contrast ratio isn’t great, and we don’t have this opacity style applied like this elsewhere in the UI).

Perhaps we can explore alternatives in follow-up PRs, but it seems less solid with the opacity.

This is a nice addition overall though.

@andrewserong
Copy link
Contributor Author

Perhaps we can explore alternatives in follow-up PRs, but it seems less solid with the opacity.

Now that I've fixed up where the drop indicator goes when we're dealing with dragging to nested blocks, I'm happy to disagree and commit here and remove the opacity rule. Code-wise it's very easy to change further down the track, and you do make good arguments about consistency and it feeling unrefined with the opacity rule.

I'll push a removal for it. Thanks again!

Copy link
Member

@richtabor richtabor left a comment

Choose a reason for hiding this comment

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

Nicely done. 🤜🤛

@andrewserong
Copy link
Contributor Author

Visual update: Here's how it's looking without the opacity rule when dragging a selected nested block, and a non-selected nested block. Overall, I think it's looking pretty good:

Drag selected block Drag non-selected block
2023-06-23 10 43 27 2023-06-23 10 43 47

If and when we can get e2e tests passing again, I'll try and get this merged in time for 6.3.

@ramonjd ramonjd added this to the Gutenberg 16.1 milestone Jun 23, 2023
@andrewserong andrewserong force-pushed the try/adjust-list-view-drag-styling branch from c862187 to 9339445 Compare June 23, 2023 03:40
@andrewserong andrewserong enabled auto-merge (squash) June 23, 2023 03:40
@andrewserong andrewserong merged commit 96150d5 into trunk Jun 23, 2023
@andrewserong andrewserong deleted the try/adjust-list-view-drag-styling branch June 23, 2023 04:08
sethrubenstein pushed a commit to pewresearch/gutenberg that referenced this pull request Jul 13, 2023
…ordPress#51724)

* ListView: Try showing blocks that are dragged, but with lower opacity

* Fix hover styling issue

* Ensure we only override hover styles

* Ensure the hover override only affects non-selected blocks

* Re-instate opacity rule

* Fix issue with drop indicator in nested dragged blocks

* Remove opacity rule
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Drag and Drop Drag and drop functionality when working with blocks [Feature] List View Menu item in the top toolbar to select blocks from a list of links. [Type] Enhancement A suggestion for improvement.
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

7 participants