1- import React , { useState } from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
22import { NETWORK_LIST } from '@/components/common/constants' ;
33
44function Options ( { networkValue, setNetworkValue } : { networkValue : number ; setNetworkValue : ( value : number ) => void } ) {
55 const [ open , setOpen ] = useState < boolean > ( false ) ;
66 const toggler = ( ) => setOpen ( ( v ) => ! v ) ;
7+ const [ searchTerm , setSearchTerm ] = useState < string > ( '' ) ;
8+ const [ filteredNetworks , setFilteredNetworks ] = useState < any [ ] > ( NETWORK_LIST ) ; // Initialized with full list
79
10+ // console.log(networkValue,setNetworkValue)
811 const handleValue = ( index : number ) => {
912 setNetworkValue ( index ) ;
10- toggler ( ) ;
13+ // toggler();
14+ setOpen ( false ) ; // Close dropdown after selection
15+
1116 } ;
1217
18+ // Filter networks based on search term
19+ useEffect ( ( ) => {
20+ if ( searchTerm . trim ( ) === '' ) {
21+ setFilteredNetworks ( NETWORK_LIST ) ; // Reset to full list when search term is empty
22+ } else {
23+ const filtered = NETWORK_LIST . filter ( ( network ) =>
24+ network . name . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) )
25+ ) ;
26+ setFilteredNetworks ( filtered ) ;
27+ }
28+ } , [ searchTerm ] ) ;
29+ const handleSearchChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
30+ setSearchTerm ( e . target . value ) ;
31+ } ;
1332 return (
1433 < div className = "relative z-0" >
1534 < div className = "py-3 px-4 border-r border-dark-200 bg-white flex items-center gap-1 text-md" role = "button" onClick = { toggler } >
@@ -22,29 +41,30 @@ function Options({ networkValue, setNetworkValue }: { networkValue: number; setN
2241 { open && (
2342 < div className = "" >
2443 < div onClick = { toggler } className = "fixed inset-0 z-100 bg-transparent" />
25- < div className = "absolute left-0 bg-white w-[200%] py-1 border-dark-200 shadow-200" >
44+ < div className = "absolute left-0 bg-white py-1 border-dark-200 shadow-200 w-52 " >
2645 < div className = "flex flex-col" >
27- < div
28- onClick = { ( ) => handleValue ( - 1 ) }
29- className = "flex items-center whitespace-no-wrap gap-2 py-2 px-3 hover:bg-dark-600/10 text-md"
30- role = "button"
31-
32- >
33- < img src = { "/zap2.svg" } alt = "" style = { { width : '20px' , height : 'auto' } } />
34- < span > Quick search</ span >
35- </ div >
36- { NETWORK_LIST . map ( ( { name, key, iconPath, iconPathInverted } , index ) => (
37- < div
38- onClick = { ( ) => handleValue ( index ) }
39- className = "flex items-center whitespace-no-wrap gap-2 py-2 px-3 hover:bg-dark-600/10 text-md"
40- role = "button"
41- key = { index }
42- >
43- < img src = { iconPath } alt = "" style = { { width : '20px' , height : 'auto' } } />
44- < span > { name } </ span >
46+ < div className = "flex items-center gap-2 py-2 px-3 hover:bg-dark-600/10 text-md" >
47+ < input
48+ type = "text"
49+ className = "px-0.5 py-0.5 rounded-md focus:outline-none focus:border-primary-400"
50+ placeholder = "Search Chains..."
51+ value = { searchTerm }
52+ onChange = { handleSearchChange }
53+ />
4554 </ div >
46- ) ) }
47-
55+ < div className = 'max-h-40 overflow-y-auto rounded-md p-2' >
56+ { filteredNetworks . map ( ( { name, iconPath } , index ) => (
57+ < div
58+ onClick = { ( ) => handleValue ( index ) }
59+ className = "flex items-center whitespace-no-wrap gap-2 py-2 px-3 hover:bg-dark-600/10 text-md"
60+ role = "button"
61+ key = { index }
62+ >
63+ < img src = { iconPath } alt = "" style = { { width : '20px' , height : 'auto' } } />
64+ < span > { name } </ span >
65+ </ div >
66+ ) ) }
67+ </ div >
4868 </ div >
4969 </ div >
5070 </ div >
0 commit comments