1
1
import classNames from 'classnames' ;
2
2
import React , { ChangeEvent , KeyboardEvent , useMemo , useState } from 'react' ;
3
- import { useDropdown } from '../../src' ;
3
+ import { DropdownState , ReducerAction , StateChangeType , useDropdown } from '../../src' ;
4
4
import './MultiSelect.css' ;
5
5
6
6
export type Item = {
@@ -52,6 +52,18 @@ export const Dropdown: React.FC<Props> = ({ onSelect, values }) => {
52
52
const [ inputValue , setInputValue ] = useState < string > ( '' ) ;
53
53
const [ isFocused , setFocused ] = useState < Boolean > ( false ) ;
54
54
55
+ const reducer = ( state : DropdownState , action : ReducerAction ) => {
56
+ const { type } = action ;
57
+
58
+ switch ( type ) {
59
+ case StateChangeType . ITEM_CLICK :
60
+ return { ...state , isOpen : true } ;
61
+
62
+ default :
63
+ return state ;
64
+ }
65
+ } ;
66
+
55
67
const handleSelect = ( item : Item ) => {
56
68
let newOptions = [ ] ;
57
69
if ( values . some ( ( el ) => el . value === item . value ) ) {
@@ -75,7 +87,7 @@ export const Dropdown: React.FC<Props> = ({ onSelect, values }) => {
75
87
getMenuProps,
76
88
getItemProps,
77
89
setOpen,
78
- } = useDropdown < Item > ( { items : options , onSelect : handleSelect } ) ;
90
+ } = useDropdown < Item > ( { items : options , onSelect : handleSelect , reducer } ) ;
79
91
80
92
const handleChange = ( event : ChangeEvent < HTMLInputElement > ) => {
81
93
setOpen ( true ) ;
@@ -142,7 +154,7 @@ export const Dropdown: React.FC<Props> = ({ onSelect, values }) => {
142
154
autoComplete = "off"
143
155
/>
144
156
145
- { ( isOpen || isFocused ) && (
157
+ { isOpen && (
146
158
< ul className = "menu" { ...( getMenuProps ( ) as any ) } >
147
159
{ options . length === 0 ? (
148
160
< li > No data</ li >
0 commit comments