1+ import { isEmpty } from 'lodash' ;
12import React , { ReactNode , useRef , useState , useEffect } from 'react' ;
3+
24import DropdownProps from 'ui/drop-down/types/drop-down-props' ;
3- import { isEmpty } from 'lodash' ;
45
5- const Dropdown = ( { items, on_select, all_click_outside, on_clear } : DropdownProps ) => {
6+ const Dropdown = ( {
7+ items,
8+ on_select,
9+ all_click_outside,
10+ on_clear,
11+ } : DropdownProps ) => {
612 const [ open , setOpen ] = useState ( false ) ;
713 const [ selected , setSelected ] = useState ( '' ) ;
814 const [ focusedIndex , setFocusedIndex ] = useState < number | null > ( null ) ;
@@ -21,10 +27,14 @@ const Dropdown = ({ items, on_select, all_click_outside, on_clear }: DropdownPro
2127 if ( ! open ) return ;
2228 if ( e . key === 'ArrowDown' ) {
2329 e . preventDefault ( ) ;
24- setFocusedIndex ( ( prev ) => ( prev === null || prev === items . length - 1 ? 0 : prev + 1 ) ) ;
30+ setFocusedIndex ( ( prev ) =>
31+ prev === null || prev === items . length - 1 ? 0 : prev + 1
32+ ) ;
2533 } else if ( e . key === 'ArrowUp' ) {
2634 e . preventDefault ( ) ;
27- setFocusedIndex ( ( prev ) => ( prev === null || prev === 0 ? items . length - 1 : prev - 1 ) ) ;
35+ setFocusedIndex ( ( prev ) =>
36+ prev === null || prev === 0 ? items . length - 1 : prev - 1
37+ ) ;
2838 } else if ( e . key === 'Enter' || e . key === ' ' ) {
2939 e . preventDefault ( ) ;
3040 if ( focusedIndex !== null ) {
@@ -51,7 +61,9 @@ const Dropdown = ({ items, on_select, all_click_outside, on_clear }: DropdownPro
5161
5262 const renderDropdownIcon = ( ) : ReactNode => {
5363 if ( isEmpty ( selected ) ) {
54- return < i className = "fas fa-chevron-down text-gray-500 dark:text-gray-300" > </ i > ;
64+ return (
65+ < i className = "fas fa-chevron-down text-gray-500 dark:text-gray-300" > </ i >
66+ ) ;
5567 }
5668
5769 return (
@@ -85,7 +97,7 @@ const Dropdown = ({ items, on_select, all_click_outside, on_clear }: DropdownPro
8597 setFocusedIndex ( null ) ;
8698 } }
8799 className = { `px-4 py-2 cursor-pointer ${
88- focusedIndex === idx ? 'bg-gray-200 dark:bg-gray-700' : ''
100+ focusedIndex === idx ? 'bg-gray-200 dark:bg-gray-700 rounded-md ' : ''
89101 } hover:bg-gray-200 dark:hover:bg-gray-700`}
90102 >
91103 { label }
@@ -102,7 +114,9 @@ const Dropdown = ({ items, on_select, all_click_outside, on_clear }: DropdownPro
102114 id = "dropdown-listbox"
103115 role = "listbox"
104116 ref = { listRef }
105- aria-activedescendant = { focusedIndex !== null ? `dropdown-item-${ focusedIndex } ` : undefined }
117+ aria-activedescendant = {
118+ focusedIndex !== null ? `dropdown-item-${ focusedIndex } ` : undefined
119+ }
106120 className = "absolute z-50 w-full mt-1 max-h-60 overflow-auto border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-900 text-black dark:text-white"
107121 >
108122 { renderItemsForDropdown ( ) }
@@ -127,7 +141,9 @@ const Dropdown = ({ items, on_select, all_click_outside, on_clear }: DropdownPro
127141 onClick = { ( ) => setOpen ( ( prev ) => ! prev ) }
128142 className = "w-full p-2 pr-10 pl-3 rounded-md border border-gray-500 dark:border-gray-700 bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-blue-500 flex items-center relative"
129143 >
130- < span className = "flex-1 truncate" > { selected || 'Select an option' } </ span >
144+ < span className = "flex-1 truncate" >
145+ { selected || 'Select an option' }
146+ </ span >
131147 < span className = "absolute right-3 top-1/2 -translate-y-1/2" >
132148 { renderDropdownIcon ( ) }
133149 </ span >
0 commit comments