1
1
<script lang =" ts" >
2
2
import { chainLogoMap } from " $lib/constants/chain-logos.ts"
3
+ import { DISABLED_CHAINS } from " $lib/constants/disabled-chains.ts"
3
4
import { tokensStore } from " $lib/stores/tokens.svelte.ts"
4
5
import { uiStore } from " $lib/stores/ui.svelte.ts"
5
6
import { transferData } from " $lib/transfer/shared/data/transfer-data.svelte.ts"
@@ -53,20 +54,22 @@ const isValidRoute = (chain: Chain) =>
53
54
54
55
const getChainStatus = (chain : Chain , hasBucket : boolean ) => {
55
56
const isSourceChain = type === " destination" && transferData .raw .source === chain .chain_id
57
+ const isDisabledChain = chain .universal_chain_id
58
+ && DISABLED_CHAINS .includes (chain .universal_chain_id )
56
59
57
60
return pipe (
58
61
Match .value (type ).pipe (
59
62
Match .when (" source" , () => ({
60
63
isSelected: transferData .raw .source === chain .chain_id ,
61
64
isSourceChain: false ,
62
- isDisabled: false ,
65
+ isDisabled: isDisabledChain ,
63
66
hasBucket ,
64
67
hasRoute: true ,
65
68
})),
66
69
Match .when (" destination" , () => ({
67
70
isSelected: transferData .raw .destination === chain .chain_id ,
68
71
isSourceChain ,
69
- isDisabled: isSourceChain || ! isValidRoute (chain ) || ! hasBucket ,
72
+ isDisabled: isSourceChain || ! isValidRoute (chain ) || ! hasBucket || isDisabledChain ,
70
73
hasBucket ,
71
74
hasRoute: isValidRoute (chain ),
72
75
})),
@@ -169,6 +172,28 @@ const filteredChains = $derived(
169
172
allChains ,
170
173
filterBySigningMode ,
171
174
chains => filterChainsByTokenAvailability (chains , uiStore .filterWhitelist ),
175
+ chainWithAvailability => {
176
+ // Sort so disabled chains appear last for both source and destination
177
+ return chainWithAvailability .sort ((a , b ) => {
178
+ const [chainA] = a
179
+ const [chainB] = b
180
+ const isDisabledA = chainA .universal_chain_id
181
+ && DISABLED_CHAINS .includes (chainA .universal_chain_id )
182
+ const isDisabledB = chainB .universal_chain_id
183
+ && DISABLED_CHAINS .includes (chainB .universal_chain_id )
184
+
185
+ // If one is disabled and the other isn't, disabled goes last
186
+ if (isDisabledA && ! isDisabledB ) {
187
+ return 1
188
+ }
189
+ if (! isDisabledA && isDisabledB ) {
190
+ return - 1
191
+ }
192
+
193
+ // If both have same disabled status, maintain original order
194
+ return 0
195
+ })
196
+ },
172
197
)
173
198
),
174
199
),
@@ -189,7 +214,7 @@ const filteredChains = $derived(
189
214
190
215
<button
191
216
class ={cn (
192
- " flex flex-col items-center gap-2 justify-start px-2 py-4 rounded-md transition-colors" ,
217
+ " flex flex-col items-center gap-2 justify-start px-2 py-4 rounded-md transition-colors min-h-[120px] " ,
193
218
status .isSelected
194
219
? " bg-zinc-900 hover:bg-zinc-800 ring-1 ring-accent"
195
220
: status .isDisabled
@@ -210,16 +235,20 @@ const filteredChains = $derived(
210
235
211
236
<span class ="text-xs text-center truncate w-fit" >{chain .display_name }</span >
212
237
213
- {#if status .isSourceChain }
214
- <span class =" text-xs text-sky-400 -mt-2" >source chain</span >
215
- {/if }
216
- {#if type === " destination" && ! status .hasRoute && ! status .isSourceChain }
217
- <span class =" text-xs text-yellow-400 -mt-2" >no route</span >
218
- {/if }
219
- {#if type === " destination" && ! status .hasBucket && status .hasRoute
220
- && ! status .isSourceChain }
221
- <span class =" text-xs text-yellow-400 -mt-2" >not whitelisted</span >
222
- {/if }
238
+ <!-- Status labels container with consistent height -->
239
+ <div class =" text-xs -mt-2 h-4 flex items-center" >
240
+ {#if status .isSourceChain }
241
+ <span class =" text-sky-400" >source chain</span >
242
+ {:else if chain .universal_chain_id
243
+ && DISABLED_CHAINS .includes (chain .universal_chain_id )}
244
+ <span class =" text-yellow-400" >disabled</span >
245
+ {:else if type === " destination" && ! status .hasRoute && ! status .isSourceChain }
246
+ <span class =" text-yellow-400" >no route</span >
247
+ {:else if type === " destination" && ! status .hasBucket && status .hasRoute
248
+ && ! status .isSourceChain }
249
+ <span class =" text-yellow-400" >not whitelisted</span >
250
+ {/if }
251
+ </div >
223
252
</button >
224
253
{/each }
225
254
</div >
0 commit comments