Skip to content

Commit eed2ce3

Browse files
committed
various fixes
1 parent 3ac49e4 commit eed2ce3

File tree

3 files changed

+75
-18
lines changed

3 files changed

+75
-18
lines changed

src/components/ChainSelector/ChainSelector.module.css

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
display: flex;
2626
align-items: center;
2727
gap: 0.5rem;
28-
padding: 0.75rem 1rem;
28+
padding: 1rem 1rem;
2929
background: white;
3030
border: 1px solid var(--color-border-light);
3131
cursor: pointer;
@@ -67,7 +67,7 @@
6767
white-space: nowrap;
6868
overflow: hidden;
6969
text-overflow: ellipsis;
70-
line-height: 1;
70+
line-height: 1.1;
7171
text-align: left;
7272
flex-grow: 1;
7373
min-width: 0;
@@ -121,6 +121,18 @@
121121
z-index: 2;
122122
}
123123

124+
.networkToggleDisabled {
125+
background-color: var(--gray-100);
126+
color: var(--gray-400);
127+
cursor: not-allowed;
128+
opacity: 0.6;
129+
}
130+
131+
.networkToggleDisabled:hover {
132+
background-color: var(--gray-100);
133+
z-index: 0;
134+
}
135+
124136
/* Network status link */
125137
.networkStatusLink {
126138
color: var(--gray-500);

src/components/ChainSelector/ChainSelector.tsx

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1618
export 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>

src/features/feeds/components/FeedList.tsx

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/** @jsxImportSource preact */
2-
import { useEffect, useState, useRef } from "preact/hooks"
2+
import { useEffect, useState, useRef, useMemo } from "preact/hooks"
33
import { MainnetTable, TestnetTable, StreamsNetworkAddressesTable } from "./Tables.tsx"
44
import feedList from "./FeedList.module.css"
55
import tableStyles from "./Tables.module.css"
@@ -167,6 +167,42 @@ export const FeedList = ({
167167
const chainMetadata = useGetChainMetadata(chain, initialCache && initialCache[chain.page])
168168
const wrapperRef = useRef(null)
169169

170+
// Determine available network types for the current chain
171+
const availableNetworkTypes = useMemo(() => {
172+
if (!chainMetadata.processedData?.networks) return { mainnet: false, testnet: false }
173+
174+
const networkTypes = {
175+
mainnet: false,
176+
testnet: false
177+
}
178+
179+
chainMetadata.processedData.networks.forEach((network) => {
180+
if (network.networkType === "mainnet") {
181+
networkTypes.mainnet = true
182+
} else if (network.networkType === "testnet") {
183+
networkTypes.testnet = true
184+
}
185+
})
186+
187+
return networkTypes
188+
}, [chainMetadata.processedData?.networks])
189+
190+
// Auto-adjust selectedNetworkType based on what's available
191+
useEffect(() => {
192+
if (!chainMetadata.loading && chainMetadata.processedData) {
193+
const { mainnet, testnet } = availableNetworkTypes
194+
195+
// If current selection is not available, switch to what's available
196+
if (selectedNetworkType === "mainnet" && !mainnet && testnet) {
197+
setSelectedNetworkType("testnet")
198+
} else if (selectedNetworkType === "testnet" && !testnet && mainnet) {
199+
setSelectedNetworkType("mainnet")
200+
}
201+
// If both are available, keep current selection
202+
// If neither are available, keep current selection (edge case)
203+
}
204+
}, [chainMetadata.loading, chainMetadata.processedData, availableNetworkTypes, selectedNetworkType])
205+
170206
// scroll handler
171207
useEffect(() => {
172208
if (!chainMetadata.loading && chainMetadata.processedData) {
@@ -616,6 +652,8 @@ export const FeedList = ({
616652
onChainSelect={handleNetworkSelect}
617653
onNetworkTypeChange={handleNetworkTypeChange}
618654
dataFeedType={dataFeedType}
655+
availableNetworkTypes={availableNetworkTypes}
656+
selectedNetworkType={selectedNetworkType}
619657
/>
620658
</div>
621659
</>

0 commit comments

Comments
 (0)