11import * as React from 'react'
22
33import { useCombobox , useMultipleSelection } from '../../src'
4- import {
5- colors ,
6- containerStyles ,
7- menuStyles ,
8- tagGroupSyles ,
9- tagStyles ,
10- } from '../utils'
4+ import { type UseMultipleSelectionReturnValue } from '../../src/hooks/useMultipleSelection/index.types'
5+ import { colors } from '../utils'
6+ import './shared.css'
117
12- const initialSelectedItems = [ colors [ 0 ] , colors [ 1 ] ]
8+ const initialSelectedItems = colors . slice ( 0 , 2 )
139
14- function getFilteredItems ( selectedItems , inputValue ) {
10+ function getFilteredItems ( selectedItems : string [ ] , inputValue : string ) {
1511 const lowerCasedInputValue = inputValue . toLowerCase ( )
1612
1713 return colors . filter (
@@ -31,21 +27,8 @@ export default function DropdownMultipleCombobox() {
3127
3228 const { getSelectedItemProps, getDropdownProps, removeSelectedItem} =
3329 useMultipleSelection ( {
34- selectedItems,
35- onStateChange ( { selectedItems : newSelectedItems , type} ) {
36- switch ( type ) {
37- case useMultipleSelection . stateChangeTypes
38- . SelectedItemKeyDownBackspace :
39- case useMultipleSelection . stateChangeTypes . SelectedItemKeyDownDelete :
40- case useMultipleSelection . stateChangeTypes . DropdownKeyDownBackspace :
41- case useMultipleSelection . stateChangeTypes . FunctionRemoveSelectedItem :
42- setSelectedItems ( newSelectedItems )
43- break
44- default :
45- break
46- }
47- } ,
48- } )
30+ initialSelectedItems,
31+ } ) as unknown as UseMultipleSelectionReturnValue < string >
4932 const {
5033 isOpen,
5134 getToggleButtonProps,
@@ -55,7 +38,7 @@ export default function DropdownMultipleCombobox() {
5538 highlightedIndex,
5639 getItemProps,
5740 selectedItem,
58- clearSelection ,
41+ reset ,
5942 } = useCombobox ( {
6043 items,
6144 inputValue,
@@ -83,19 +66,19 @@ export default function DropdownMultipleCombobox() {
8366 switch ( type ) {
8467 case useCombobox . stateChangeTypes . InputKeyDownEnter :
8568 case useCombobox . stateChangeTypes . ItemClick :
86- setSelectedItems ( [ ...selectedItems , newSelectedItem ] )
69+ setSelectedItems ( [ ...selectedItems , newSelectedItem as string ] )
8770
8871 break
8972 case useCombobox . stateChangeTypes . InputChange :
90- setInputValue ( newInputValue )
73+ setInputValue ( newInputValue as string )
9174 break
9275 default :
9376 break
9477 }
9578 } ,
9679 } )
9780 return (
98- < div style = { containerStyles } >
81+ < div className = "container" >
9982 < label
10083 style = { {
10184 fontWeight : 'bolder' ,
@@ -105,33 +88,34 @@ export default function DropdownMultipleCombobox() {
10588 >
10689 Choose an element:
10790 </ label >
108- < div style = { tagGroupSyles } >
109- { selectedItems . map (
110- function renderSelectedItem ( selectedItemForRender , index ) {
111- return (
91+ < div className = "tag-group" >
92+ { selectedItems . map ( function renderSelectedItem (
93+ selectedItemForRender : string ,
94+ index : number ,
95+ ) {
96+ return (
97+ < span
98+ className = "tag"
99+ key = { `selected-item-${ index } ` }
100+ { ...getSelectedItemProps ( {
101+ selectedItem : selectedItemForRender ,
102+ index,
103+ } ) }
104+ >
105+ { selectedItemForRender }
106+ { /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */ }
112107 < span
113- style = { tagStyles }
114- key = { `selected-item-${ index } ` }
115- { ...getSelectedItemProps ( {
116- selectedItem : selectedItemForRender ,
117- index,
118- } ) }
108+ style = { { padding : '4px' , cursor : 'pointer' } }
109+ onClick = { e => {
110+ e . stopPropagation ( )
111+ removeSelectedItem ( selectedItemForRender )
112+ } }
119113 >
120- { selectedItemForRender }
121- { /* eslint-disable-next-line jsx-a11y/click-events-have-key-events */ }
122- < span
123- style = { { padding : '4px' , cursor : 'pointer' } }
124- onClick = { e => {
125- e . stopPropagation ( )
126- removeSelectedItem ( selectedItemForRender )
127- } }
128- >
129- ✕
130- </ span >
114+ ✕
131115 </ span >
132- )
133- } ,
134- ) }
116+ </ span >
117+ )
118+ } ) }
135119 < div >
136120 < input
137121 style = { { padding : '4px' } }
@@ -150,20 +134,20 @@ export default function DropdownMultipleCombobox() {
150134 style = { { padding : '4px 8px' } }
151135 aria-label = "clear selection"
152136 data-testid = "clear-button"
153- onClick = { clearSelection }
137+ onClick = { ( ) => reset ( ) }
154138 >
155139 ✗
156140 </ button >
157141 </ div >
158142 </ div >
159- < ul { ...getMenuProps ( ) } style = { menuStyles } >
143+ < ul { ...getMenuProps ( ) } className = "menu" >
160144 { isOpen
161145 ? items . map ( ( item , index ) => (
162146 < li
163147 style = { {
164148 padding : '4px' ,
165149 backgroundColor :
166- highlightedIndex === index ? '#bde4ff' : null ,
150+ highlightedIndex === index ? '#bde4ff' : undefined ,
167151 } }
168152 key = { `${ item } ${ index } ` }
169153 { ...getItemProps ( {
0 commit comments