@@ -11,6 +11,8 @@ interface ChainSelectorProps {
1111 onChainSelect : ( chain : Chain ) => void
1212 onNetworkTypeChange ?: ( networkType : "mainnet" | "testnet" , chain : Chain ) => void
1313 dataFeedType ?: string
14+ availableNetworkTypes ?: { mainnet : boolean ; testnet : boolean }
15+ selectedNetworkType ?: "mainnet" | "testnet"
1416}
1517
1618export function ChainSelector ( {
@@ -19,10 +21,14 @@ export function ChainSelector({
1921 currentNetwork,
2022 onChainSelect,
2123 onNetworkTypeChange,
22- dataFeedType = "default"
24+ dataFeedType = "default" ,
25+ availableNetworkTypes = { mainnet : true , testnet : true } ,
26+ selectedNetworkType : externalSelectedNetworkType
2327} : ChainSelectorProps ) {
2428 const [ isOpen , setIsOpen ] = useState ( false )
25- const [ selectedNetworkType , setSelectedNetworkType ] = useState < "mainnet" | "testnet" > ( "mainnet" )
29+ const [ selectedNetworkType , setSelectedNetworkType ] = useState < "mainnet" | "testnet" > (
30+ externalSelectedNetworkType || "mainnet"
31+ )
2632 const [ searchTerm , setSearchTerm ] = useState ( "" )
2733 const [ focusedIndex , setFocusedIndex ] = useState ( - 1 )
2834 const containerRef = useRef < HTMLDivElement > ( null )
@@ -65,17 +71,12 @@ export function ChainSelector({
6571 }
6672 } , [ isOpen , focusedIndex , filteredChains ] )
6773
68- // Find current network type based on selected chain and currentNetwork
74+ // Sync with external selectedNetworkType
6975 useEffect ( ( ) => {
70- if ( selectedChain ) {
71- const currentChainNetwork = selectedChain . networks . find ( network =>
72- network . queryString === currentNetwork || selectedChain . page === currentNetwork
73- )
74- if ( currentChainNetwork ) {
75- setSelectedNetworkType ( currentChainNetwork . networkType )
76- }
76+ if ( externalSelectedNetworkType && externalSelectedNetworkType !== selectedNetworkType ) {
77+ setSelectedNetworkType ( externalSelectedNetworkType )
7778 }
78- } , [ selectedChain , currentNetwork ] )
79+ } , [ externalSelectedNetworkType ] )
7980
8081 // Scroll focused item into view
8182 useEffect ( ( ) => {
@@ -198,19 +199,25 @@ export function ChainSelector({
198199 type = "button"
199200 className = { clsx (
200201 styles . networkToggle ,
201- selectedNetworkType === "mainnet" && styles . networkToggleActive
202+ selectedNetworkType === "mainnet" && styles . networkToggleActive ,
203+ ! availableNetworkTypes . mainnet && styles . networkToggleDisabled
202204 ) }
203- onClick = { ( ) => handleNetworkTypeToggle ( "mainnet" ) }
205+ onClick = { ( ) => availableNetworkTypes . mainnet && handleNetworkTypeToggle ( "mainnet" ) }
206+ disabled = { ! availableNetworkTypes . mainnet }
207+ title = { ! availableNetworkTypes . mainnet ? `${ selectedChain . label } feeds are not available on mainnet` : undefined }
204208 >
205209 Mainnet
206210 </ button >
207211 < button
208212 type = "button"
209213 className = { clsx (
210214 styles . networkToggle ,
211- selectedNetworkType === "testnet" && styles . networkToggleActive
215+ selectedNetworkType === "testnet" && styles . networkToggleActive ,
216+ ! availableNetworkTypes . testnet && styles . networkToggleDisabled
212217 ) }
213- onClick = { ( ) => handleNetworkTypeToggle ( "testnet" ) }
218+ onClick = { ( ) => availableNetworkTypes . testnet && handleNetworkTypeToggle ( "testnet" ) }
219+ disabled = { ! availableNetworkTypes . testnet }
220+ title = { ! availableNetworkTypes . testnet ? `${ selectedChain . label } feeds are not available on testnet` : undefined }
214221 >
215222 Testnet
216223 </ button >
0 commit comments