@@ -45,26 +45,22 @@ const FuzzySelectInput = <T extends Result = Result>({
4545 const menuRef = useRef < HTMLUListElement > ( null ) ;
4646 const inputRef = useRef < HTMLInputElement > ( null ) ;
4747
48- // Fuzzy filter options
4948 const filteredItems = useMemo ( ( ) => {
5049 if ( ! query ) return options ;
5150 return fuzzy
5251 . filter ( query , options , { extract : ( item ) => item . text } )
5352 . map ( ( result ) => result . original ) ;
5453 } , [ query , options ] ) ;
5554
56- // Handle option selection
5755 const handleSelect = useCallback (
5856 ( item : T ) => {
5957 if ( mode === "create" && item . uid && item . uid !== initialUid ) {
60- // Lock the value
6158 setIsLocked ( true ) ;
6259 setQuery ( item . text ) ;
6360 setValue ( item ) ;
6461 setIsOpen ( false ) ;
6562 onLockedChange ?.( true ) ;
6663 } else {
67- // Just update the value
6864 setQuery ( item . text ) ;
6965 setValue ( item ) ;
7066 setIsOpen ( false ) ;
@@ -73,15 +69,13 @@ const FuzzySelectInput = <T extends Result = Result>({
7369 [ mode , initialUid , setValue , onLockedChange ] ,
7470 ) ;
7571
76- // Handle clear locked value
7772 const handleClear = useCallback ( ( ) => {
7873 setIsLocked ( false ) ;
7974 setQuery ( "" ) ;
8075 setValue ( { ...value , text : "" , uid : "" } as T ) ;
8176 onLockedChange ?.( false ) ;
8277 } , [ value , setValue , onLockedChange ] ) ;
8378
84- // Handle keyboard navigation
8579 const handleKeyDown = useCallback (
8680 ( e : React . KeyboardEvent < HTMLInputElement > ) => {
8781 if ( e . key === "ArrowDown" ) {
@@ -106,15 +100,12 @@ const FuzzySelectInput = <T extends Result = Result>({
106100 [ filteredItems , activeIndex , isOpen , handleSelect ] ,
107101 ) ;
108102
109- // Update value as user types
110103 useEffect ( ( ) => {
111104 if ( mode === "create" && ! isLocked ) {
112105 setValue ( { text : query , uid : "" } as T ) ;
113106 }
114107 } , [ query , mode , isLocked , setValue ] ) ;
115108
116- // Open/close dropdown based on filtered items
117- // Only show dropdown if input is focused
118109 useEffect ( ( ) => {
119110 if ( isFocused && filteredItems . length > 0 && query ) {
120111 setIsOpen ( true ) ;
@@ -123,12 +114,10 @@ const FuzzySelectInput = <T extends Result = Result>({
123114 }
124115 } , [ filteredItems . length , query , isFocused ] ) ;
125116
126- // Reset active index when filtered items change
127117 useEffect ( ( ) => {
128118 setActiveIndex ( 0 ) ;
129119 } , [ filteredItems ] ) ;
130120
131- // Scroll active item into view
132121 useEffect ( ( ) => {
133122 if ( menuRef . current && isOpen ) {
134123 const activeElement = menuRef . current . children [
@@ -143,7 +132,6 @@ const FuzzySelectInput = <T extends Result = Result>({
143132 }
144133 } , [ activeIndex , isOpen ] ) ;
145134
146- // Edit mode: simple TextArea
147135 if ( mode === "edit" ) {
148136 return (
149137 < TextArea
@@ -160,7 +148,6 @@ const FuzzySelectInput = <T extends Result = Result>({
160148 ) ;
161149 }
162150
163- // Create mode: locked value display
164151 if ( isLocked ) {
165152 return (
166153 < div className = "flex w-full items-center gap-2" >
@@ -181,7 +168,6 @@ const FuzzySelectInput = <T extends Result = Result>({
181168 ) ;
182169 }
183170
184- // Create mode: fuzzy search input
185171 return (
186172 < Popover
187173 isOpen = { isOpen }
@@ -234,5 +220,4 @@ const FuzzySelectInput = <T extends Result = Result>({
234220 ) ;
235221} ;
236222
237- export default FuzzySelectInput ;
238-
223+ export default FuzzySelectInput ;
0 commit comments