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: allow users to add filters dynamically #55992

Merged
merged 35 commits into from
Nov 15, 2023

Conversation

oandregal
Copy link
Member

@oandregal oandregal commented Nov 9, 2023

Part of #55083
Related #55100

What?

Allow user to add filters dynamically.

Gravacao.do.ecra.2023-11-15.as.11.43.23.mov

Testing Instructions

  • Enable the "admin views" experiment and visit "Appareance > Editor > Manage all pages".
  • Go to the view actions menu and show/hide filters as desired.

@oandregal oandregal self-assigned this Nov 9, 2023
@oandregal oandregal added [Type] Feature New feature to highlight in changelogs. [Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond labels Nov 9, 2023
Copy link

github-actions bot commented Nov 9, 2023

Size Change: -663 B (0%)

Total Size: 1.7 MB

Filename Size Change
build/blob/index.min.js 590 B +129 B (+28%) 🚨
build/block-editor/index.min.js 247 kB +26 B (0%)
build/components/style-rtl.css 12 kB +5 B (0%)
build/components/style.css 12 kB +4 B (0%)
build/edit-site/index.min.js 209 kB -725 B (0%)
build/editor/index.min.js 46 kB +1 B (0%)
build/list-reusable-blocks/index.min.js 2.11 kB -103 B (-5%)
ℹ️ 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/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.28 kB
build/block-editor/content.css 4.27 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/style-rtl.css 15.7 kB
build/block-editor/style.css 15.7 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 138 B
build/block-library/blocks/audio/theme.css 138 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 633 B
build/block-library/blocks/button/style.css 632 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 320 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.55 kB
build/block-library/blocks/gallery/style.css 1.55 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 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 849 B
build/block-library/blocks/image/editor.css 847 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 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.04 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.27 kB
build/block-library/blocks/navigation/style.css 2.26 kB
build/block-library/blocks/navigation/view.min.js 1.07 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 637 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 613 B
build/block-library/blocks/search/style.css 613 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 471 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 329 B
build/block-library/blocks/shortcode/editor.css 329 B
build/block-library/blocks/site-logo/editor-rtl.css 760 B
build/block-library/blocks/site-logo/editor.css 760 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.45 kB
build/block-library/blocks/social-links/style.css 1.45 kB
build/block-library/blocks/spacer/editor-rtl.css 359 B
build/block-library/blocks/spacer/editor.css 359 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 432 B
build/block-library/blocks/table/editor.css 432 B
build/block-library/blocks/table/style-rtl.css 646 B
build/block-library/blocks/table/style.css 645 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 191 B
build/block-library/blocks/video/style.css 191 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.5 kB
build/block-library/editor.css 12.4 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 212 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.5 kB
build/block-library/style.css 14.5 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.5 kB
build/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 947 B
build/commands/style.css 942 B
build/components/index.min.js 256 kB
build/compose/index.min.js 12.7 kB
build/core-commands/index.min.js 2.72 kB
build/core-data/index.min.js 71.8 kB
build/customize-widgets/index.min.js 12.1 kB
build/customize-widgets/style-rtl.css 1.43 kB
build/customize-widgets/style.css 1.43 kB
build/data-controls/index.min.js 651 B
build/data/index.min.js 8.87 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 462 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.68 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 35.9 kB
build/edit-post/style-rtl.css 7.75 kB
build/edit-post/style.css 7.74 kB
build/edit-site/style-rtl.css 14.2 kB
build/edit-site/style.css 14.2 kB
build/edit-widgets/index.min.js 17.2 kB
build/edit-widgets/style-rtl.css 4.65 kB
build/edit-widgets/style.css 4.65 kB
build/editor/style-rtl.css 3.58 kB
build/editor/style.css 3.58 kB
build/element/index.min.js 4.87 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.76 kB
build/format-library/style-rtl.css 577 B
build/format-library/style.css 577 B
build/hooks/index.min.js 1.57 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.61 kB
build/interactivity/index.min.js 11.4 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.76 kB
build/keycodes/index.min.js 1.9 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 964 B
build/nux/index.min.js 2.01 kB
build/nux/style-rtl.css 775 B
build/nux/style.css 771 B
build/patterns/index.min.js 4.81 kB
build/patterns/style-rtl.css 567 B
build/patterns/style.css 566 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 1.85 kB
build/preferences/index.min.js 1.26 kB
build/primitives/index.min.js 994 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 988 B
build/react-i18n/index.min.js 631 B
build/react-refresh-entry/index.min.js 9.46 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.71 kB
build/reusable-blocks/index.min.js 2.76 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 9.96 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 1.98 kB
build/token-list/index.min.js 587 B
build/url/index.min.js 3.83 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 967 B
build/warning/index.min.js 259 B
build/widgets/index.min.js 7.18 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@oandregal
Copy link
Member Author

oandregal commented Nov 9, 2023

@jameskoster @SaxonF I wanted to clarify some details about the API and interactions/UI, so I went ahead and implemented this – even if author and status are not removable at the moment. I've left some questions in the issue description, would be great to hear your input.

@oandregal oandregal mentioned this pull request Nov 9, 2023
26 tasks
@jameskoster
Copy link
Contributor

Thanks for the ping, and the hard work on this so far.

In terms of design, I don't think it should be framed as show/hide, instead the general heuristic should be; if the filter is active then it is visible. Otherwise it would be possible to hide active filters which could lead to a fairly confusing UX. So with that said the behavior is pretty close, but the View menu doesn't seem like the right place for this affordance.

I still believe the ideal state is a "+ Add filter" button which includes the options, and even allows you to configure the filter right there via flyout:

Screenshot 2023-11-09 at 14 29 49

Once added, the filter can be removed via the associated dropdown (or by clicking the global "Reset filters" button):

Screenshot 2023-11-09 at 14 32 01

Do you think that's feasible, or do we need to come up with something for the short-term? If so, perhaps something like this could work:

Filters

In this scenario removing a filter would also reset it.


Is it really necessary to prevent some filters from being removed?

The original idea was that some filters are so common that they should be included by default. But I feel that we've pivoted a bit on that by including default Views instead, such as "Draft" and "Trash" for pages. So for now we can probably defer adding any special privileges for certain filters, as it may not be needed.

I hope that answers all the questions!

@oandregal
Copy link
Member Author

I hope that answers all the questions!

It does, it's very helpful. Thank you, @jameskoster! I'll update the PR to incorporate that feedback tomorrow/Monday.

@oandregal oandregal force-pushed the update/filters-show-and-hide branch from 65da3bf to c5f597b Compare November 10, 2023 09:58
@oandregal oandregal changed the title DataViews: allow users to show/hide some of the filters DataViews: allow users to add filters dynamically Nov 10, 2023
@oandregal
Copy link
Member Author

@jameskoster I've implemented the suggested design:

Gravacao.do.ecra.2023-11-10.as.11.10.56.mov

The one thing I see missing is the ability to remove a single filter from their own component. I'd like to do this in a follow-up PR: it requires updating the current filter components to dropdowns, which also enables us to implement multi-select, etc.

@ntsekouras
Copy link
Contributor

I'd expect for filters to show when they have a value. An example is going to trash view and filter is not rendered. That's the wanted behavior?


export default function AddFilter( { filters, onChangeView } ) {
return (
<BaseControl>
Copy link
Contributor

Choose a reason for hiding this comment

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

Why do we need this BaseControl wrapper?

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 is how it looks like without it (alignment issues):

Captura de ecrã 2023-11-10, às 15 28 53

Happy to solve it any other way.

Copy link
Contributor

Choose a reason for hiding this comment

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

BaseControl is mean to add a label and a help to controls (inputs, selects...), if it's the spacing that is the issue here, we should probably just use a HStack with align center or something for the row or something like that.

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 already tried setting the alignment in the existing HStack component, though it didn't work.

Copy link
Member Author

@oandregal oandregal Nov 14, 2023

Choose a reason for hiding this comment

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

Note the alignment of the components in the top-level is an issue for the "view actions" component as well (pre-existing to this PR):

Captura de ecrã 2023-11-14, às 11 28 18

Copy link
Member Author

@oandregal oandregal Nov 14, 2023

Choose a reason for hiding this comment

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

The issue here is a mix of things: different height for components (search was 40, but others were 32) + different spacing (search, as a base control, uses a 8px margin-bottom, but the buttons use 6 padding top&bottom).

I've got a fix with 1e99ee9 and 6daf5f2 Would this alternative be preferred?

Copy link
Member Author

Choose a reason for hiding this comment

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

Found a way to reset the BaseControl margin via component prop at 353ca40 I'll mark this as fixed.

@oandregal
Copy link
Member Author

I'd expect for filters to show when they have a value. An example is going to trash view and filter is not rendered. That's the wanted behavior?

You mean selecting one of the default views in the sidebar? That's a good one, I'll fix on Monday.

@oandregal oandregal force-pushed the update/filters-show-and-hide branch from 1afeb01 to b959096 Compare November 13, 2023 08:43
@oandregal
Copy link
Member Author

@ntsekouras sidebars behaviour is fixed now.

@@ -47,7 +47,6 @@ Example:
{ field: 'author', operator: 'in', value: 2 },
{ field: 'status', operator: 'in', value: 'publish,draft' }
],
visibleFilters: [ 'author', 'status' ],
Copy link
Member Author

@oandregal oandregal Nov 13, 2023

Choose a reason for hiding this comment

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

We no longer need this, the visible filters are derived from the filters state.

Copy link

github-actions bot commented Nov 13, 2023

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

@oandregal
Copy link
Member Author

@jameskoster @ntsekouras is there any blocker to merge this PR? I've got some follow-ups ready that would benefit from having this in trunk.

label={ __( 'Add filter' ) }
trigger={
<Button
aria-disabled={ filters.length === view.filters?.length }
Copy link
Contributor

Choose a reason for hiding this comment

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

Should this be __experimentalIsFocusable disabled like suggested by @ciampo

Copy link
Contributor

Choose a reason for hiding this comment

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

I always thought this behavior should be default in buttons, any reason to require __experimentalIsFocusable @ciampo ?

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

Choose a reason for hiding this comment

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

Unfortunately I don't have much context around it, since these changes were discussed before I started working on @wordpress/components. Best I could find is this comment — it looks like we initially wanted to make the prop true by default, but we were concerned about potential unintended consequences.

Copy link
Contributor

Choose a reason for hiding this comment

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

Good call and I was on that discussion as well. I guess now, I may be more on the side of let's try and remove that prop and make it default and see how it goes.

@oandregal
Copy link
Member Author

Ok, this is the latest: the reset button behaves as it was, this PR only adds the new "+ Add Filter" button.

The video demonstrates a bit of keyboard navigation and filtering through different means (sidebar, columns, top-level components):

Gravacao.do.ecra.2023-11-15.as.11.16.51.mov

@jameskoster
Copy link
Contributor

A couple of thoughts on the general UX...

The + Add filter menu has a disabled Reset button when no filters are active. Do we really need this, isn't it reasonable to only render this button when filters are active?

Similarly when a filter has been added it still appears in the + Add filter menu, disabled. This convention adds a lot of noise making it less clear which filters you can add to the existing set. Since the button label is "Add filter", isn't it fair to only display filters the user can add and hide active ones?

When adding a filter like Author or Status, the "All" value isn't super-helpful. Would it be possible to hide that option?

One tiny detail; let's use the compact size for the + Add filter button so that it aligns nicely with the Search input.

@oandregal
Copy link
Member Author

oandregal commented Nov 15, 2023

The + Add filter menu has a disabled Reset button when no filters are active. Do we really need this, isn't it reasonable to only render this button when filters are active?

I've just updated this. Note that for focus control, the "Add Filter" button is not hidden but disabled (when no more filters are left to add).

Similarly when a filter has been added it still appears in the + Add filter menu, disabled.

I'll remove the filter from the list. Edit: done at e9c62fb

When adding a filter like Author or Status, the "All" value isn't super-helpful. Would it be possible to hide that option?

I'll remove as well. Done at fb601d2

One tiny detail; let's use the compact size for the + Add filter button so that it aligns nicely with the Search input.

I wonder if you have tried with the latest PR? This is how it looks now:

Captura de ecrã 2023-11-15, às 11 35 46

@oandregal
Copy link
Member Author

oandregal commented Nov 15, 2023

@jameskoster I think all your feedback has been addressed :)

Gravacao.do.ecra.2023-11-15.as.11.43.23.mov

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.

Nice work on this PR

@oandregal
Copy link
Member Author

One tiny detail; let's use the compact size for the + Add filter button so that it aligns nicely with the Search input.

Ah, I misunderstood this. It's now fixed:

Captura de ecrã 2023-11-15, às 12 01 23

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.

Thanks for addressing all the feedback, approving provisionally as there's one small thing we might want to address:

Screenshot 2023-11-15 at 11 08 34

I'm not sure why the author dropdown is being truncated here – there's enough room to show the full thing.

@oandregal
Copy link
Member Author

I'm not sure why the author dropdown is being truncated here – there's enough room to show the full thing.

I'll look at that separately.

@andrewhayward
Copy link
Contributor

For Buttons, we're thinking of using the aria-disabled attribute instead of disabled to allow the focus to stay on the button even when it gets disabled as the result of a user click (basically, doing something like <Button __experimentalIsFocusable disabled />)

Using onlyMostlyDisabled here definitely works, and would be appropriate for most buttons here. I've been meaning to write up an issue for it.

Looks like we need to check the focus ring styling on aria-disabled buttons though. The "reset" button here has focus, but that isn't visible. I believe this is a Button problem, so will file a Components issue to fix it.

A toolbar with a search field, two buttons and a dropdown toggle. One button (circled in red) is disabled and focused, but has no focus ring.

Seems like the CSS is intentionally overriding the custom focus ring to remove it. Ideally it would be the same, but at the very least we should be indicating focus somehow.

A code snippet showing focus outline styling being overridden by further CSS rules.

@andrewhayward
Copy link
Contributor

The + Add filter menu has a disabled Reset button when no filters are active. Do we really need this, isn't it reasonable to only render this button when filters are active?

One thing to be aware of when removing buttons is focus management. If a user presses the "reset" button, and there are no active filters remaining (it's unclear if it resets the filters to their "saved" state, or removes them entirely), the button will be removed. This then means that the focus, which was on the button, is lost, which can be confusing. If we are going to go ahead with this, we'll need to make sure focus is at least moved somewhere appropriate – possibly the "add filter" menu button.

@oandregal
Copy link
Member Author

One thing to be aware of when removing buttons is focus management. If a user presses the "reset" button, and there are no active filters remaining (it's unclear if it resets the filters to their "saved" state, or removes them entirely), the button will be removed. This then means that the focus, which was on the button, is lost, which can be confusing. If we are going to go ahead with this, we'll need to make sure focus is at least moved somewhere appropriate – possibly the "add filter" menu button.

This has been changed so the "ResetFilter" button is independent of the "AddFilter" component and always displayed. This is the latest:

Gravacao.do.ecra.2023-11-15.as.11.43.23.mov

@oandregal oandregal merged commit 1bf654b into trunk Nov 15, 2023
50 checks passed
@oandregal oandregal deleted the update/filters-show-and-hide branch November 15, 2023 14:18
@github-actions github-actions bot added this to the Gutenberg 17.1 milestone Nov 15, 2023
@andrewhayward
Copy link
Contributor

Looks like we need to check the focus ring styling on aria-disabled buttons though. The "reset" button here has focus, but that isn't visible. I believe this is a Button problem, so will file a Components issue to fix it.

For reference, I filed #56149 to handle this.

@oandregal
Copy link
Member Author

I'm not sure why the author dropdown is being truncated here – there's enough room to show the full thing.

I'll look at that separately.

Bugfix at #56151

@oandregal oandregal added [Type] Experimental Experimental feature or API. and removed [Type] Feature New feature to highlight in changelogs. labels Nov 16, 2023
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.

6 participants