61eeeb3c68
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` |
||
---|---|---|
.. | ||
test | ||
README.md | ||
index.ts | ||
item.tsx | ||
search-list-control.tsx | ||
style.scss | ||
types.ts | ||
utils.tsx |
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
: Numbername
: 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 inputselected
: 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.