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: implement multiple selection for filters #59610

Merged
merged 24 commits into from
Mar 11, 2024

Conversation

oandregal
Copy link
Member

@oandregal oandregal commented Mar 5, 2024

Part of #55083
Related #55100

What?

Implements the ability to select multiple items in a filter.

Multi-selection:

  • value/names are connected with is any / is none, e.g.: Status is any: Draft, Scheduled
  • the filter popover uses checkboxes
Captura de ecrã 2024-03-11, às 16 50 56

Single-selection:

  • value/names are connected with is / is not, e.g.: Sync status is: Synced.
  • the filter popover uses radios
Captura de ecrã 2024-03-11, às 16 50 40

Why?

We need to support both single and multi selection in filters.

How?

Filters can declare whether they allow single-selection or multi-selection by using the filterBy.operators property:

  • by default, they support multi-selection
  • by setting filterBy.operators: [ OPERATOR_IS, OPERATOR_IS_NOT ] a filter can configure single-selection
  • by setting filterBy.operators: [ OPERATOR_IS_ANY, OPERATOR_IS_NONE ] a filter can configure multi-selection
Constant Filter definition Label Example
OPERATOR_IS is is Author is: Admin
OPERATOR_IS_NOT isNot is not Author is not: Admin
OPERATOR_IS_ANY isAny is any Author is any: Admin, Editor
OPERATOR_IS_NONE isNone is none Author is none: Admin, Editor

Multi-selection filter (Author & Status filters in Pages):

Gravacao.do.ecra.2024-03-11.as.16.44.24.mov

Singe-selection filter (Sync filter in Patterns):

Gravacao.do.ecra.2024-03-11.as.16.44.09.mov

Testing Instructions

Verify that the filters work as described for:

  • Pages. Both Author and Status should be multi-selection.
  • Patterns. Sync should be single-selection.
  • Templates. Author filter should be multi-selection.
  • Parts. Author filter should be multi-selection.

TODO

  • Implement for ListBox
  • Implement for Combobox.
  • Truncation.
  • Dev note about OPERATOR_IN, OPERATOR_NOT_IN being multi-selection from now on.
  • Make templates & template parts work.

Follow-ups

@oandregal oandregal self-assigned this Mar 5, 2024
@oandregal oandregal added the [Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond label Mar 5, 2024
@oandregal oandregal added the [Type] Feature New feature to highlight in changelogs. label Mar 5, 2024
@oandregal oandregal mentioned this pull request Mar 5, 2024
26 tasks
@oandregal oandregal added the [Status] In Progress Tracking issues with work in progress label Mar 5, 2024
Copy link

github-actions bot commented Mar 5, 2024

Size Change: +354 B (0%)

Total Size: 1.71 MB

Filename Size Change
build/edit-site/index.min.js 217 kB +354 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.32 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 578 B
build/block-directory/index.min.js 7.22 kB
build/block-directory/style-rtl.css 1.03 kB
build/block-directory/style.css 1.03 kB
build/block-editor/content-rtl.css 4.4 kB
build/block-editor/content.css 4.4 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/index.min.js 252 kB
build/block-editor/style-rtl.css 15.6 kB
build/block-editor/style.css 15.6 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 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 415 B
build/block-library/blocks/button/editor.css 414 B
build/block-library/blocks/button/style-rtl.css 627 B
build/block-library/blocks/button/style.css 626 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.69 kB
build/block-library/blocks/cover/style.css 1.68 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 322 B
build/block-library/blocks/embed/editor.css 322 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/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 324 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 227 B
build/block-library/blocks/form-input/editor.css 227 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 340 B
build/block-library/blocks/form-submission-notification/editor.css 340 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 471 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 947 B
build/block-library/blocks/gallery/editor.css 952 B
build/block-library/blocks/gallery/style-rtl.css 1.72 kB
build/block-library/blocks/gallery/style.css 1.72 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 647 B
build/block-library/blocks/group/editor.css 647 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 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 894 B
build/block-library/blocks/image/editor.css 893 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 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/image/view.min.js 1.54 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 306 B
build/block-library/blocks/media-text/editor.css 305 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 668 B
build/block-library/blocks/navigation-link/editor.css 669 B
build/block-library/blocks/navigation-link/style-rtl.css 259 B
build/block-library/blocks/navigation-link/style.css 257 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/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.02 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 377 B
build/block-library/blocks/page-list/editor.css 377 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-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 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 342 B
build/block-library/blocks/post-featured-image/style.css 342 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 354 B
build/block-library/blocks/pullquote/style.css 354 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/view.min.js 958 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 629 B
build/block-library/blocks/search/style.css 628 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 478 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 229 B
build/block-library/blocks/separator/style.css 229 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 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.48 kB
build/block-library/blocks/social-links/style.css 1.48 kB
build/block-library/blocks/spacer/editor-rtl.css 350 B
build/block-library/blocks/spacer/editor.css 350 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 395 B
build/block-library/blocks/table/editor.css 395 B
build/block-library/blocks/table/style-rtl.css 639 B
build/block-library/blocks/table/style.css 639 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 185 B
build/block-library/blocks/video/style.css 185 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.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.4 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 217 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.8 kB
build/block-library/style.css 14.8 kB
build/block-library/theme-rtl.css 688 B
build/block-library/theme.css 693 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 51.8 kB
build/commands/index.min.js 15.6 kB
build/commands/style-rtl.css 935 B
build/commands/style.css 930 B
build/components/index.min.js 223 kB
build/components/style-rtl.css 11.8 kB
build/components/style.css 11.8 kB
build/compose/index.min.js 12.6 kB
build/core-commands/index.min.js 2.77 kB
build/core-data/index.min.js 72.8 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 8.95 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 558 B
build/edit-post/classic.css 558 B
build/edit-post/index.min.js 24.2 kB
build/edit-post/style-rtl.css 5.58 kB
build/edit-post/style.css 5.57 kB
build/edit-site/style-rtl.css 15 kB
build/edit-site/style.css 15 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.16 kB
build/editor/index.min.js 63.8 kB
build/editor/style-rtl.css 5.34 kB
build/editor/style.css 5.33 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 7.88 kB
build/format-library/style-rtl.css 492 B
build/format-library/style.css 490 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/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.67 kB
build/interactivity/index.min.js 13 kB
build/interactivity/navigation.min.js 1.15 kB
build/interactivity/query.min.js 740 B
build/interactivity/router.min.js 1.36 kB
build/interactivity/search.min.js 618 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.74 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 851 B
build/list-reusable-blocks/style.css 849 B
build/media-utils/index.min.js 2.9 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 2 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 742 B
build/patterns/index.min.js 5.71 kB
build/patterns/style-rtl.css 553 B
build/patterns/style.css 552 B
build/plugins/index.min.js 1.8 kB
build/preferences-persistence/index.min.js 2.05 kB
build/preferences/index.min.js 2.82 kB
build/preferences/style-rtl.css 710 B
build/preferences/style.css 712 B
build/primitives/index.min.js 975 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 623 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.72 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 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.95 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 2.1 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.72 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 957 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.17 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

Copy link

github-actions bot commented Mar 5, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: oandregal <oandregal@git.wordpress.org>
Co-authored-by: ntsekouras <ntsekouras@git.wordpress.org>
Co-authored-by: jameskoster <jameskoster@git.wordpress.org>
Co-authored-by: jorgefilipecosta <jorgefilipecosta@git.wordpress.org>
Co-authored-by: andrewhayward <andrewhayward@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@@ -325,6 +325,7 @@ export default function DataviewsPatterns() {
filterBy: {
operators: [ OPERATOR_IN ],
isPrimary: true,
singleSelection: true,
Copy link
Contributor

Choose a reason for hiding this comment

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

I feel like we should have the single selection by default, similar for example to select tag with the multiple attribute.

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 started that way, but then looked at the current uses cases:

  • Pages. Both Author and Status should be multiselection.
  • Patterns. Sync should be single selection.
  • Templates. Author filter should be multiselection.
  • Parts. Author filter should be multiselection.

All filters but one (sync in patterns) use multiselection, so I thought we should actually optimize for the common use case.

Copy link
Contributor

Choose a reason for hiding this comment

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

In general I think this will probably be inferred from the new operators.

Copy link
Member Author

Choose a reason for hiding this comment

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

In general I think this will probably be inferred from the new operators.

Can you expand this comment?

Copy link
Member Author

@oandregal oandregal Mar 6, 2024

Choose a reason for hiding this comment

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

Instead of the singleSelection flag we could use a flag to declare what are the supported relationship? As in:

relationship: [ ANY_OF, ALL_OF ]

I like this, going to investigate a bit.

Copy link
Contributor

@jameskoster jameskoster Mar 6, 2024

Choose a reason for hiding this comment

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

relationship: [ ANY_OF, ALL_OF ]

We'll need something like this for category and tag filtering. E.g. It should be possible to; view posts in Category A or Category B. Or: View posts in Category A and Category B. The inverse should also be possible (posts not in Category A or B).

The UI should provide a way for users to change this operator.

Copy link
Member Author

Choose a reason for hiding this comment

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

Pushed a change for this and updated the docs to explain:

Allowed operators for fields of type enumeration:

  • equal: whether an item is equal to a single value.
  • notEqual: whether an item is not equal to a single value.
  • in: whether an item is in a list of values.
  • notIn: whether an item is not in a list of values.

By default, a field of type enumeration supports in and notIn operators — this is, it supports multiselection and negation.

A filter cannot mix single-selection (equal, notEqual) & multi-selection (in, notIn) operators. If a single-selection operator is present in the list of valid operators, the multi-selection ones will be discarded and the filter won't allow selecting more than one item.

Copy link
Member Author

@oandregal oandregal Mar 6, 2024

Choose a reason for hiding this comment

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

Examples:

  • Single-selection filter: operators: [ OPERATOR_EQUAL, OPERATOR_NOT_EQUAL ]
  • Multi-selection filter (the default): operators: [ OPERATOR_IN, OPERATOR_NOT_IN ]
  • Single-selection filter that does not support negation: operators: [ OPERATOR_EQUAL ]
  • etc.

This PR only adds the single-selection operators and makes the existing filters (in/not in) multi-selection. They are OR operators, so I'll add the AND operator in a follow-up.

For reference, in terms of nomenclature we'd have (and their negations):

Constant Filter definition Label Example
OPERATOR_EQUAL equal is Author is Admin
OPERATOR_NOT_EQUAL notEqual is not Author is not Admin
OPERATOR_IN in in Author in Admin, Editor
OPERATOR_NOT_IN notIn not in Author not in Admin, Editor
OPERATOR_ALL* all is all of Tags is all of Books, English, School
OPERATOR_NOT_ALL* notAll is not all of Tags is none of Books, English, School

* To be implemented in a future PR, shared for reference.

@ntsekouras
Copy link
Contributor

ntsekouras commented Mar 6, 2024

Thanks for the PR! I haven't checked the code much yet, but tested it a bit. We should probably truncate the selected values, because if there are too many the chip gets quite big.

Additionally it's not clear to me whether the selected values have an OR or AND relationship. I think the direction with multiple values is to also have new operators: is any of, is all of etc..

Finally by quickly testing I'd expect the templates list to work, since you have the single value as default for now, but it doesn't. Again I didn't check the code though why this is happening..

@oandregal oandregal requested a review from mcsf March 6, 2024 09:10
@oandregal
Copy link
Member Author

Finally by quickly testing I'd expect the templates list to work, since you have the single value as default for now, but it doesn't. Again I didn't check the code though why this is happening..

Do you have more than 10 templates by chance? Combobox wasn't implemented, I just did it now.

@oandregal
Copy link
Member Author

Found a weird thing with the Ariakit.ComboboxProvider. Notice how clicking twice on the same element doesn't trigger the setSelectedValue after the first click:

Gravacao.do.ecra.2024-03-06.as.10.26.42.mov

@oandregal
Copy link
Member Author

We should probably truncate the selected values, because if there are too many the chip gets quite big.

@jameskoster any thoughts?

I understand the rationale for limiting the space, though it comes with hiding the values that are selected — which requires the user to actually open the filter to see them all and they may or may not be contiguous. I'm on the fence about this one.

@jameskoster
Copy link
Contributor

I think we'll be forced to truncate at some point – a really large site could choose many values for a single filter. Perhaps we could display a badge when more than X values are chosen, or when a certain letter-count threshold is breached?

token

@oandregal oandregal removed the [Status] In Progress Tracking issues with work in progress label Mar 7, 2024
@oandregal
Copy link
Member Author

I think we'll be forced to truncate at some point – a really large site could choose many values for a single filter

I went with truncation for the time being, we can revisit later.

@oandregal
Copy link
Member Author

@ntsekouras @jameskoster @jorgefilipecosta this is working as expected and all your feedback was addressed. Is there anything else to do before landing?

@jameskoster
Copy link
Contributor

The concern with truncating only by character count is that the user has no idea how many values are selected without opening the filter config popover.

Would it be possible to truncate another way? If not the badge I suggested above then something like: Category is Recipes, Reviews, +2?

If that's going to blow-up the scope of the PR then I'd be tempted to remove the truncation and explore a comprehensive solution in a follow-up.

Copy link
Member

@jorgefilipecosta jorgefilipecosta left a comment

Choose a reason for hiding this comment

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

There is a behavior that if possible would be good to address:
At the start there is no filter applied. And all records are shown
If I select a "In" filter and then imeadtly unselect the list becomes empty. I think ideally the filter would be removed and all records would be shown.

@andrewhayward
Copy link
Contributor

The concern with truncating only by character count is that the user has no idea how many values are selected without opening the filter config popover.

Would it be possible to truncate another way? If not the badge I suggested above then something like: Category is Recipes, Reviews, +2?

Agreed that character truncation isn't ideal here, and that "Category is Recipes and 3 others", "Author is not Admin or 2 others", etc would be more comprehensible. Could leave two options alone though... "Status is Draft or Scheduled" for example.

Two info tokens, reading "Author is not admin or 2 others" and "Status is Draft or Scheduled"

Might need to watch the character count for individual values, as there's still the potential for somewhat long chips, but it's more manageable at least.

@oandregal
Copy link
Member Author

At the start there is no filter applied. And all records are shown
If I select a "In" filter and then imeadtly unselect the list becomes empty. I think ideally the filter would be removed and all records would be shown.

Ah, thanks for the report. I could only reproduce in Templates & Parts, that have a custom filter mechanism. It's fixed now.

@oandregal
Copy link
Member Author

oandregal commented Mar 7, 2024

I reverted the truncation until we figure out a better way. To be investigated separately.

@jameskoster
Copy link
Contributor

jameskoster commented Mar 7, 2024

Might need to watch the character count for individual values,

That's a good point.

I'll make an issue for truncation. (#59696)


Overall this seems very close, the only detail I'm unsure of is the operator labels – Author in Admin, Status in Published, Draft isn't very intuitive. Since posts can only have a single author or status, should the options be 'is'/'is not'?

Thinking more about fields that can have multiple values (e.g. Tags/Categories), perhaps something like:

  • Category is: Equipment, Recipes, and Reviews (returns posts in Equipment and Recipes and Reviews categories)
  • Category contains: Equipment, Recipes, or Reviews (returns posts in Equipment or Recipes or Reviews categories)

What do you think?

@oandregal
Copy link
Member Author

I've pushed the changes to adapt the code to the agreed operators: is, isNot, isAny, isNone and tested that all pages work fine.

Gravacao.do.ecra.2024-03-11.as.16.43.53.mov
Gravacao.do.ecra.2024-03-11.as.16.44.24.mov
Gravacao.do.ecra.2024-03-11.as.16.44.09.mov

@oandregal
Copy link
Member Author

If there's only one item selected, we fall back to is / is not.

Added this as a follow-up.

@oandregal oandregal enabled auto-merge (squash) March 11, 2024 15:56
@oandregal oandregal merged commit 8c7e6be into trunk Mar 11, 2024
57 checks passed
@oandregal oandregal deleted the add/filter-multi-selection branch March 11, 2024 16:18
@github-actions github-actions bot added this to the Gutenberg 18.0 milestone Mar 11, 2024
@oandregal
Copy link
Member Author

#59953 adds the AND operators.

/* translators: 1: Filter name. 3: Filter value. e.g.: "Author is any: Admin, Editor". */
__( '<Name>%1$s is any: </Name><Value>%2$s</Value>' ),
filter.name,
activeElements.map( ( element ) => element.label ).join( ', ' )
Copy link
Contributor

Choose a reason for hiding this comment

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

I suspect that some (few) locales will want to have a say in the punctuation used to enumerate filters:

activeElements.map( ... ).join(
  /* translators: string used to join together active filters, e.g. "Author is any: Admin, Editor" */
  __( ', ')
)

@swissspidy: do you know if this is done elsewhere in WP?

return createInterpolateElement(
sprintf(
/* translators: 1: Filter name. 3: Filter value. e.g.: "Author is any: Admin, Editor". */
__( '<Name>%1$s is any: </Name><Value>%2$s</Value>' ),
Copy link
Contributor

Choose a reason for hiding this comment

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

From a UX perspective, I wonder if we shouldn't switch the string based on the number of active filters:

  • Is any of: Admin, Editor
  • Is: Editor

… or if that would make things more confusing because "Is:" overlaps with OPERATOR_IS. 🤔

(I also wonder whether "Is any of" would sound more natural.)

@bph bph added [Type] Enhancement A suggestion for improvement. and removed [Type] Feature New feature to highlight in changelogs. labels Mar 21, 2024
carstingaxion pushed a commit to carstingaxion/gutenberg that referenced this pull request Mar 27, 2024
Co-authored-by: oandregal <oandregal@git.wordpress.org>
Co-authored-by: ntsekouras <ntsekouras@git.wordpress.org>
Co-authored-by: jameskoster <jameskoster@git.wordpress.org>
Co-authored-by: jorgefilipecosta <jorgefilipecosta@git.wordpress.org>
Co-authored-by: andrewhayward <andrewhayward@git.wordpress.org>
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] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants