woocommerce/plugins/woocommerce-blocks/assets/js/editor-components/search-list-control
Lucio Giannotta 61eeeb3c68 Improve Products block Attributes Filter Inspector Controls (https://github.com/woocommerce/woocommerce-blocks/pull/8583)
This PR is meant to improve the UI and UX behind the Attributes filter
within the Inspector Controls of the “Products (Beta)“ block.

Also included:

* Refactor `useProductAttributes` hook
  * Move it into the shared hooks.
  * Fetch both terms AND attributes via the API (previously,
we got the attributes from the settings, but we'd get
partial objects compared to the API? Maybe a follow-up
to this could be to check why the attributes stored in
the settings are incomplete?)
  * Make sure the return values match the ones expected
from search items.
* Remove attribute-related types from PQ directory
* Improve functionality of `SearchListControl`
  * Allow the search input to be a Token based input.
  * Allow for search input to search even collapsed properties.
  * Use core `CheckboxControl` instead of radio buttons for
items having children (includes undeterminated state).
  * Enable removal of tokens from the input
* Improve styles:
  * Refactor classnames for `SearchItem`.
  * Add more semantic classes.
  * Align count label and caret to the right.
  * Make caret switch direction on expanded.
  * `cursor: pointer` on collapsible items.
  * Indent children of collapsible items.
  * Correctly pass through class names to search item
* Enable keyboard navigation for collapsible items
* Add link to manage attributes
* Change label inside the inspector controls
* Make search list attached when token type
* Implement more sophisticated behavior of parent checkbox
  * If indeterminate or unchecked, it will check all children.
  * If checked, it will uncheck all children.
* Remove hardcoded `isSingle` from `expandableSearchListItem`
2023-03-08 17:22:51 +01:00
..
test Improve Products block Attributes Filter Inspector Controls (https://github.com/woocommerce/woocommerce-blocks/pull/8583) 2023-03-08 17:22:51 +01:00
README.md Improve the structure of the WooCommerce Blocks Handbook (https://github.com/woocommerce/woocommerce-blocks/pull/6429) 2022-06-09 17:52:19 +02:00
index.ts Update WordPress Monorepo packages with React 17x support (https://github.com/woocommerce/woocommerce-blocks/pull/5223) 2021-12-07 15:47:50 +00:00
item.tsx Improve Products block Attributes Filter Inspector Controls (https://github.com/woocommerce/woocommerce-blocks/pull/8583) 2023-03-08 17:22:51 +01:00
search-list-control.tsx Improve Products block Attributes Filter Inspector Controls (https://github.com/woocommerce/woocommerce-blocks/pull/8583) 2023-03-08 17:22:51 +01:00
style.scss Improve Products block Attributes Filter Inspector Controls (https://github.com/woocommerce/woocommerce-blocks/pull/8583) 2023-03-08 17:22:51 +01:00
types.ts Improve Products block Attributes Filter Inspector Controls (https://github.com/woocommerce/woocommerce-blocks/pull/8583) 2023-03-08 17:22:51 +01:00
utils.tsx Improve Products block Attributes Filter Inspector Controls (https://github.com/woocommerce/woocommerce-blocks/pull/8583) 2023-03-08 17:22:51 +01:00

README.md

SearchListControl

Table of contents

Component to display a searchable, selectable list of items.

Usage

<SearchListControl
	list={ list }
	isLoading={ loading }
	selected={ selected }
	onChange={ ( items ) => setState( { selected: items } ) }
/>

Props

Name Type Default Description
className String null Additional CSS classes
isHierarchical Boolean null Whether the list of items is hierarchical or not. If true, each list item is expected to have a parent property
isLoading Boolean null Whether the list of items is still loading
isSingle Boolean null Restrict selections to one item
list Array null A complete list of item objects, each with id, name properties. This is displayed as a clickable/keyboard-able list, and possibly filtered by the search term (searches name)
messages Object null Messages displayed or read to the user. Configure these to reflect your object type. See defaultMessages above for examples
onChange Function null (required) Callback fired when selected items change, whether added, cleared, or removed. Passed an array of item objects (as passed in via props.list)
onSearch Function null Callback fired when the search field is used
renderItem Function null Callback to render each item in the selection list, allows any custom object-type rendering
selected Array null (required) The list of currently selected items
search String null
setState Function null
debouncedSpeak Function null
instanceId Number null

list item structure

  • id: Number
  • name: String

messages object structure

  • clear: String - A more detailed label for the "Clear all" button, read to screen reader users.
  • list: String - Label for the list of selectable items, only read to screen reader users.
  • noItems: String - Message to display when the list is empty (implies nothing loaded from the server or parent component).
  • noResults: String - Message to display when no matching results are found. %s is the search term.
  • search: String - Label for the search input
  • selected: Function - Label for the selected items. This is actually a function, so that we can pass through the count of currently selected items.
  • updated: String - Label indicating that search results have changed, read to screen reader users.

SearchListItem

Usage

Used implicitly by SearchListControl when the renderItem prop is omitted.

Props

Name Type Default Description
className String null Additional CSS classes
countLabel ReactNode null Label to display in the count bubble. Takes preference over item.count.
depth Number 0 Depth, non-zero if the list is hierarchical
item Object null Current item to display
isSelected Boolean null Whether this item is selected
isSingle Boolean null Whether this should only display a single item (controls radio vs checkbox icon)
onSelect Function null Callback for selecting the item
search String '' Search string, used to highlight the substring in the item name

We're hiring! Come work with us!

🐞 Found a mistake, or have a suggestion? Leave feedback about this document here.