Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
242 commits
Select commit Hold shift + click to select a range
a690979
feat(tokenselector): enhance VirtualList component
fairlighteth Nov 13, 2025
77f44af
feat(tokenselector): add useDeferredVisibility hook for optimized ren…
fairlighteth Nov 13, 2025
272d2c9
refactor(tokenselector): streamline token search results and enhance …
fairlighteth Nov 13, 2025
ec63bfa
feat(tokenselector): implement recent tokens feature and enhance toke…
fairlighteth Nov 14, 2025
071ced1
feat(tokenselector): add chain selection logic and enhance token widg…
fairlighteth Nov 14, 2025
41e4281
feat(tokenselector): enhance TradeWidget with token selection and res…
fairlighteth Nov 14, 2025
7063b6a
feat(tokenselector): implement SelectTokenModal with enhanced token s…
fairlighteth Nov 14, 2025
a52a5dd
feat(tokenselector): enhance SelectTokenModal with chain selection
fairlighteth Nov 14, 2025
b849a44
refactor: extract SelectTokenWidget controller
fairlighteth Nov 17, 2025
259c318
docs: describe recent token storage schema
fairlighteth Nov 17, 2025
d64ef3c
fix: make SelectTokenModal onSelectChain optional
fairlighteth Nov 17, 2025
a60856c
fix: guard optional chain selector handlers
fairlighteth Nov 17, 2025
dd238e8
feat(tokenselector): implement SelectTokenWidget with enhanced chain …
fairlighteth Nov 17, 2025
7739ad4
fix: update fallback logic for unsupported source chains in chain sel…
fairlighteth Nov 18, 2025
43247d6
refactor: remove onSelectChain from SelectTokenModalProps interface
fairlighteth Nov 18, 2025
8ae654a
Merge branch 'develop' into feat/token-selector-1
fairlighteth Nov 18, 2025
f06936c
Merge branch 'feat/token-selector-1' into feat/token-selector-2
fairlighteth Nov 18, 2025
4bf6109
Merge branch 'feat/token-selector-2' into feat/token-selector-3
fairlighteth Nov 18, 2025
e5a997d
Merge branch 'feat/token-selector-3' into feat/token-selector-4
fairlighteth Nov 18, 2025
03f6002
refactor: improve tooltip handling in TokenSourceTitle component
fairlighteth Nov 18, 2025
91e6efe
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Nov 18, 2025
f1f268c
Merge branch 'feat/token-selector-3' into feat/token-selector-4
fairlighteth Nov 18, 2025
00e9a54
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Nov 18, 2025
06e4157
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Nov 18, 2025
c2bc6a1
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Nov 18, 2025
3f443a2
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Nov 18, 2025
e0d8edf
Merge branch 'feat/token-selector-9' into feat/token-selector-10
fairlighteth Nov 18, 2025
0b4fe87
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Nov 18, 2025
b318210
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Nov 18, 2025
62d9df0
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Nov 18, 2025
63b3478
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Nov 18, 2025
bcc0496
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Nov 18, 2025
6e0a8c6
Merge branch 'feat/token-selector-9' into feat/token-selector-10
fairlighteth Nov 18, 2025
1acffda
Merge branch 'develop' into feat/token-selector-1
fairlighteth Nov 19, 2025
7e85dc1
refactor: token pinning logic to ensure recent tokens are displayed c…
fairlighteth Nov 19, 2025
5e58eaf
refactor: remove x close button in manage token list modal
fairlighteth Nov 19, 2025
ced278a
Merge branch 'feat/token-selector-1' into feat/token-selector-2
fairlighteth Nov 20, 2025
93ec9ed
refactor: standardize token key generation across hooks and components
fairlighteth Nov 20, 2025
edaaed4
refactor: integrate useCloseTokenSelectWidget for improved widget clo…
fairlighteth Nov 20, 2025
f21738b
refactor: optimize token import logic and fix balance retrieval in To…
fairlighteth Nov 25, 2025
9682143
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Nov 25, 2025
653f69d
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Nov 25, 2025
0a36b49
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Nov 25, 2025
f81ec8d
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Nov 25, 2025
d675a2e
Merge remote-tracking branch 'origin/feat/token-selector-8' into feat…
fairlighteth Nov 25, 2025
4f25b7f
Merge branch 'feat/token-selector-9' into feat/token-selector-10
fairlighteth Nov 25, 2025
b07917a
Merge branch 'feat/token-selector-10' into feat/token-selector-11
fairlighteth Nov 25, 2025
be08eee
Merge branch 'feat/token-selector-11' into feat/token-selector-12
fairlighteth Nov 25, 2025
38939a4
refactor: enhance TradeWidgetModals to utilize usePrevious
fairlighteth Nov 26, 2025
cd49f8e
refactor: simplify max-width logic in TradeWidget container
fairlighteth Nov 26, 2025
24260ca
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Nov 27, 2025
b3f48f1
refactor: extract TokenColumnContent component and clean up SelectTok…
fairlighteth Nov 27, 2025
8288b94
refactor: rename SelectTokenModalProps to TokenListContentProps
fairlighteth Nov 27, 2025
8c81595
refactor: add TODO for prop count reduction in TokenListContentProps
fairlighteth Nov 27, 2025
4948d79
chore: resolve merge for token selector chain panel
fairlighteth Nov 27, 2025
0bbdc81
refactor: update useSourceChainId to include field check for chain se…
fairlighteth Nov 27, 2025
a1380a0
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Nov 28, 2025
4f46d1f
fix: improve error logging for network switch failure in token selection
fairlighteth Nov 28, 2025
9f68f8a
refactor: streamline onSelectChain handling in SelectTokenWidget
fairlighteth Nov 28, 2025
c5fa3df
Merge branch 'feat/token-selector-9' of github.com:cowprotocol/cowswa…
fairlighteth Nov 28, 2025
ec0d7c2
refactor: make onSelectChain and onOpenMobileChainPanel optional in S…
fairlighteth Nov 28, 2025
1baae32
refactor: simplify JSX structure in SelectTokenModal and TokenColumnC…
fairlighteth Nov 28, 2025
b72b0e0
feat: add onSelectChain prop to defaultModalProps in SelectTokenModal
fairlighteth Nov 28, 2025
2cf36f0
refactor: update chainsToSelect handling in SelectTokenWidget and Sel…
fairlighteth Nov 28, 2025
fe753a2
Merge branch 'feat/token-selector-10' into feat/token-selector-11
fairlighteth Nov 28, 2025
f2b470c
Merge branch 'feat/token-selector-11' into feat/token-selector-12
fairlighteth Nov 28, 2025
2982baf
Merge remote-tracking branch 'origin/develop' into feat/token-selector-1
fairlighteth Dec 3, 2025
b47f361
refactor: streamline chain accent color management
fairlighteth Dec 3, 2025
956724a
test: add unit tests for chain accent color management
fairlighteth Dec 3, 2025
eb337a1
refactor: optimize VirtualList rendering by replacing loop with map f…
fairlighteth Dec 3, 2025
ead0b9e
refactor: update scrollResetKey type in VirtualList component to number
fairlighteth Dec 3, 2025
bba11f9
refactor: implement fallback color handling for chain accent colors
fairlighteth Dec 3, 2025
9ed94c9
refactor: enhance chain accent color configuration with a helper func…
fairlighteth Dec 3, 2025
1815ecf
fix: undo po file
fairlighteth Dec 3, 2025
956c440
fix: revert changes po file
fairlighteth Dec 3, 2025
76eb85a
Merge branch 'feat/token-selector-1' into feat/token-selector-2
fairlighteth Dec 3, 2025
4e2b336
refactor: enforce accentVar as a required property in ChainAccentConf…
fairlighteth Dec 3, 2025
2825b63
test: add validation for chainId consistency in ChainAccentColors
fairlighteth Dec 3, 2025
0458763
Merge branch 'feat/token-selector-1' into feat/token-selector-2
fairlighteth Dec 3, 2025
603af35
Merge branch 'feat/token-selector-2' into feat/token-selector-3
fairlighteth Dec 3, 2025
aa7fa8f
refactor: decompose TokenSeachContent component
fairlighteth Dec 3, 2025
e0daf21
test: add comprehensive tests for useSearchRows hook in TokenSearchCo…
fairlighteth Dec 3, 2025
90ccb79
refactor: simplify token creation in useSearchRows tests
fairlighteth Dec 3, 2025
6bce153
Merge branch 'feat/token-selector-3' into feat/token-selector-4
fairlighteth Dec 3, 2025
6f77199
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 3, 2025
aa864e8
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 3, 2025
bc32977
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 3, 2025
bcd4762
refactor: replace legacy chain selector function with a dedicated com…
fairlighteth Dec 3, 2025
a66315f
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Dec 3, 2025
9e5e616
refactor: streamline ChainsSelector component and enhance loading sta…
fairlighteth Dec 3, 2025
b533601
refactor: clean up getChainAccent function by removing unnecessary wh…
fairlighteth Dec 3, 2025
2aff086
test: add unit tests for getChainAccent function to validate chain ac…
fairlighteth Dec 3, 2025
e51d246
refactor: revert po changes
fairlighteth Dec 3, 2025
2389dee
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Dec 4, 2025
af4595b
Merge branch 'develop' into feat/token-selector-1
fairlighteth Dec 4, 2025
9817979
refactor: update TokenLogo component
fairlighteth Dec 4, 2025
fcae04e
fix: disable lint rule for useVirtualizer hook compliance
fairlighteth Dec 4, 2025
8ba8474
Merge branch 'develop' into feat/token-selector-1
fairlighteth Dec 4, 2025
b43d69c
Merge branch 'feat/token-selector-1' into feat/token-selector-2
shoom3301 Dec 4, 2025
f8d5be8
Merge branch 'develop' into feat/token-selector-1
fairlighteth Dec 4, 2025
1216290
Merge branch 'feat/token-selector-1' into feat/token-selector-2
fairlighteth Dec 4, 2025
02ebfbc
Merge branch 'develop' into feat/token-selector-2
fairlighteth Dec 4, 2025
471fa59
Merge branch 'feat/token-selector-2' into feat/token-selector-3
fairlighteth Dec 4, 2025
6a9eb96
Merge branch 'feat/token-selector-3' into feat/token-selector-4
fairlighteth Dec 4, 2025
8de893f
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 4, 2025
8fb1e21
Merge branch 'develop' into feat/token-selector-3
fairlighteth Dec 4, 2025
dada4db
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 4, 2025
77f4825
Merge branch 'feat/token-selector-3' into feat/token-selector-4
fairlighteth Dec 4, 2025
0f1632a
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 4, 2025
4d4e02a
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 4, 2025
49a3fe6
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 4, 2025
6cd8c95
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Dec 4, 2025
a5328d9
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Dec 4, 2025
f86ef33
refactor(tokensList): modularize FavoriteTokensList component
fairlighteth Dec 4, 2025
c03dfde
refactor(tokensList): replace renderTokensView function with TokensVi…
fairlighteth Dec 4, 2025
e07df07
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 4, 2025
374755b
refactor: rename renderValue function to formatValue for clarity
fairlighteth Dec 4, 2025
615da19
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 4, 2025
ab0d88f
refactor: implement SelectTokenWidget helper functions
fairlighteth Dec 4, 2025
020cc7f
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 4, 2025
d372f05
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 4, 2025
6587732
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 4, 2025
b34da00
feat(token-selector): implement SelectTokenWidget helper functions an…
fairlighteth Dec 4, 2025
a38e5b7
Merge remote-tracking branch 'origin/feat/token-selector-7' into feat…
fairlighteth Dec 4, 2025
fe91216
Merge remote-tracking branch 'origin/feat/token-selector-8' into feat…
fairlighteth Dec 4, 2025
52dc3a4
Merge remote-tracking branch 'origin/feat/token-selector-9' into feat…
fairlighteth Dec 4, 2025
d77a522
fix: revert token list url
fairlighteth Dec 4, 2025
05327ab
feat: enhance localization support in ChainPanel and SelectTokenModal…
fairlighteth Dec 4, 2025
655226a
fix: update ManageListsAndTokens component to include onDismiss prop
fairlighteth Dec 4, 2025
4e22948
fix: correct Russian plural form for 'View all {totalChains} networks'
fairlighteth Dec 4, 2025
3ac256b
fix: update Spanish and Russian translations for cross-chain swap ter…
fairlighteth Dec 4, 2025
d4f7460
fix: refine Russian translations for cross-chain swap terminology
fairlighteth Dec 4, 2025
50c46c3
fix: add Spanish and Russian translations for 'Recent' in TokensVirtu…
fairlighteth Dec 4, 2025
9a01bf3
fix: add Spanish and Russian translations for 'Clear' in TokensVirtua…
fairlighteth Dec 4, 2025
abfc412
Merge branch 'feat/token-selector-10' into feat/token-selector-11
fairlighteth Dec 4, 2025
1c37238
Merge branch 'feat/token-selector-11' into feat/token-selector-12
fairlighteth Dec 4, 2025
6af1305
refactor: rename and modularize SelectTokenWidget helper functions
fairlighteth Dec 5, 2025
23b8ff2
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 5, 2025
b5805b4
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 5, 2025
4f175e1
fix: conditionally render SelectTokenWidget based on token selection …
fairlighteth Dec 5, 2025
b863b55
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 5, 2025
5235543
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Dec 5, 2025
ef97c76
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Dec 5, 2025
84f18d8
Merge branch 'feat/token-selector-9' into feat/token-selector-10
fairlighteth Dec 5, 2025
a1a9dcf
fix: update chain selection logic for advanced trade types to prevent…
fairlighteth Dec 5, 2025
24c41b7
test: enhance useChainsToSelect tests for various trade types and cha…
fairlighteth Dec 5, 2025
0c1ce15
feat: integrate feature flag for bridging enablement in BridgingEnabl…
fairlighteth Dec 5, 2025
9eea62d
test: add unit tests for BridgingEnabledUpdater component to validate…
fairlighteth Dec 5, 2025
8b95820
Merge branch 'feat/token-selector-10' into feat/token-selector-11
fairlighteth Dec 5, 2025
2a0bc99
Merge branch 'feat/token-selector-11' into feat/token-selector-12
fairlighteth Dec 5, 2025
7ae47c0
feat: add support for disabled chain IDs in token selection logic
fairlighteth Dec 5, 2025
356481e
feat: add Spanish and Russian translations for unsupported destinatio…
fairlighteth Dec 5, 2025
a1bab01
refactor: remove debug logging from useChainsToSelect hook to clean u…
fairlighteth Dec 5, 2025
5c5cd01
feat: implement tooltip for disabled chains in MobileChainSelector
fairlighteth Dec 5, 2025
cef77ae
feat: add useRoutesAvailability hook and integrate into chain selecti…
fairlighteth Dec 9, 2025
251d354
fix: update Russian translation for unsupported destination message i…
fairlighteth Dec 9, 2025
76e8c2f
Merge branch 'develop' into feat/token-selector-3
fairlighteth Dec 9, 2025
6fbcec3
Merge branch 'feat/token-selector-3' into feat/token-selector-4
fairlighteth Dec 9, 2025
015ff94
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 9, 2025
e370149
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 9, 2025
601257c
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 9, 2025
b55e993
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Dec 9, 2025
fdb5371
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Dec 9, 2025
2925980
Merge remote-tracking branch 'origin/feat/token-selector-9' into feat…
fairlighteth Dec 9, 2025
17ce84f
Merge branch 'feat/token-selector-10' into feat/token-selector-11
fairlighteth Dec 9, 2025
ceaea87
Merge branch 'feat/token-selector-11' into feat/token-selector-12
fairlighteth Dec 9, 2025
361fe68
Merge branch 'feat/token-selector-12' into feat/token-selector-13
fairlighteth Dec 9, 2025
4f62a58
refactor: remove unused modal content components and update imports i…
fairlighteth Dec 10, 2025
54ce95d
refactor: streamline SelectTokenWidget by removing unused components …
fairlighteth Dec 10, 2025
a140cf0
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 10, 2025
ad53463
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 10, 2025
33f0771
feat: add useCloseTokenSelectWidget hook and update imports in TradeW…
fairlighteth Dec 10, 2025
b3783a7
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 10, 2025
32d9b94
refactor: replace TokensContentSection with TokensContent
fairlighteth Dec 10, 2025
6f0f123
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Dec 10, 2025
daf2d38
refactor: separate getChainAccent function into its own file and upda…
fairlighteth Dec 10, 2025
8c022f3
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Dec 10, 2025
69f8317
refactor: remove SelectTokenWidget helper functions and types to stre…
fairlighteth Dec 10, 2025
3befb75
Merge branch 'feat/token-selector-9' into feat/token-selector-10
fairlighteth Dec 10, 2025
54687d1
refactor: remove unused props from SelectTokenModal to simplify compo…
fairlighteth Dec 10, 2025
6ff9da6
refactor: remove SelectTokenModalContent and update types in SelectTo…
fairlighteth Dec 10, 2025
81d4e84
Merge branch 'develop' into feat/token-selector-4
fairlighteth Dec 10, 2025
996b963
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 10, 2025
4798560
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 10, 2025
b01ecc7
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 10, 2025
9e65c5b
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Dec 10, 2025
512d1c8
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Dec 10, 2025
5452d8e
Merge branch 'feat/token-selector-9' into feat/token-selector-10
fairlighteth Dec 10, 2025
8d80fdf
Merge branch 'feat/token-selector-10' into feat/token-selector-11
fairlighteth Dec 10, 2025
212b74e
Merge branch 'feat/token-selector-11' into feat/token-selector-12
fairlighteth Dec 10, 2025
b29be06
refactor: simplify SelectTokenWidget cleanup logic and stabilize clos…
fairlighteth Dec 10, 2025
a39b058
Merge branch 'feat/token-selector-12' into feat/token-selector-13
fairlighteth Dec 10, 2025
6ec3aa4
Merge branch 'develop' into feat/token-selector-4
fairlighteth Dec 10, 2025
bc266f5
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 10, 2025
efd1e52
Merge branch 'develop' into feat/token-selector-4
fairlighteth Dec 11, 2025
169c56f
refactor(tokensList): replace props drilling with Jotai atom
fairlighteth Dec 11, 2025
03a4115
Merge branch 'develop' into feat/token-selector-4
fairlighteth Dec 11, 2025
62a7585
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 11, 2025
37d14a5
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 11, 2025
0436f9c
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 11, 2025
0db3787
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Dec 11, 2025
a600182
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Dec 11, 2025
01342a5
refactor(tokensList): move atom hydration to controller, slim modal p…
fairlighteth Dec 11, 2025
8285d30
refactor: memoize hydration values for stable type inference
fairlighteth Dec 11, 2025
5a72cb2
refactor: define concrete tuple type for TypeScript overloads
fairlighteth Dec 11, 2025
8177cbe
Merge branch 'feat/token-selector-9' into feat/token-selector-10
fairlighteth Dec 11, 2025
37756f8
Merge branch 'feat/token-selector-10' into feat/token-selector-11
fairlighteth Dec 11, 2025
e8c20a2
Merge branch 'feat/token-selector-11' into feat/token-selector-12
fairlighteth Dec 11, 2025
1a21e05
Merge branch 'feat/token-selector-12' into feat/token-selector-13
fairlighteth Dec 11, 2025
c57a85f
refactor: bridgingEnabledUpdater to remove feature flag dependency
fairlighteth Dec 11, 2025
262bc27
Merge branch 'develop' into feat/token-selector-4
fairlighteth Dec 11, 2025
502eb32
Merge branch 'feat/token-selector-12' into feat/token-selector-13
fairlighteth Dec 11, 2025
f5eccb3
Merge branch 'feat/token-selector-13' into feat/token-selector-14
fairlighteth Dec 11, 2025
59271eb
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 11, 2025
6400b65
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 11, 2025
6ad1e2a
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 11, 2025
71e5b70
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Dec 11, 2025
a316ba2
Merge branch 'feat/token-selector-8' into feat/token-selector-9
fairlighteth Dec 11, 2025
de21d1d
Merge branch 'feat/token-selector-9' into feat/token-selector-10
fairlighteth Dec 11, 2025
823bab3
Merge branch 'feat/token-selector-10' into feat/token-selector-11
fairlighteth Dec 11, 2025
ce5d3e6
Merge branch 'feat/token-selector-11' into feat/token-selector-12
fairlighteth Dec 11, 2025
211b4dc
Merge branch 'feat/token-selector-12' into feat/token-selector-13
fairlighteth Dec 11, 2025
0dfdb3f
Merge branch 'feat/token-selector-13' into feat/token-selector-14
fairlighteth Dec 11, 2025
8fff317
Merge branch 'develop' into feat/token-selector-4
fairlighteth Dec 12, 2025
efd2381
refactor: update recent tokens storage constants and improve naming c…
fairlighteth Dec 12, 2025
cd29cc1
refactor: rename recent tokens storage constants for consistency and …
fairlighteth Dec 12, 2025
336ba7d
Merge branch 'feat/token-selector-4' into feat/token-selector-5
fairlighteth Dec 12, 2025
a8306e4
feat: add TODO comment to revisit wallet bridging for advanced trades
fairlighteth Dec 12, 2025
1cdcea7
refactor: simplify width calculation logic in styled component
fairlighteth Dec 12, 2025
1fb7aae
Merge branch 'feat/token-selector-5' into feat/token-selector-6
fairlighteth Dec 12, 2025
7b8d9ba
Merge branch 'feat/token-selector-6' into feat/token-selector-7
fairlighteth Dec 12, 2025
8b380ec
Merge branch 'feat/token-selector-7' into feat/token-selector-8
fairlighteth Dec 12, 2025
32877a5
fix: update aria-hidden attribute in ActiveIcon for accessibility
fairlighteth Dec 12, 2025
def614d
refactor: remove TODO comment regarding 'modules' import in useGetExe…
fairlighteth Dec 12, 2025
f506eb2
Merge remote-tracking branch 'origin/feat/token-selector-8' into feat…
fairlighteth Dec 15, 2025
3884349
Merge branch 'feat/token-selector-9' into feat/token-selector-10
fairlighteth Dec 15, 2025
c3be32a
refactor: remove feature flag dependency from BridgingEnabledUpdater …
fairlighteth Dec 15, 2025
0719aac
Merge branch 'feat/token-selector-10' into feat/token-selector-11
fairlighteth Dec 15, 2025
de3ddef
Merge branch 'feat/token-selector-11' into feat/token-selector-12
fairlighteth Dec 15, 2025
49c2048
Merge branch 'feat/token-selector-12' into feat/token-selector-13
fairlighteth Dec 15, 2025
17e0c06
feat: add TODO comment to revisit chain selection limitations for TWA…
fairlighteth Dec 15, 2025
a8f73a3
Merge branch 'feat/token-selector-13' into feat/token-selector-14
fairlighteth Dec 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion apps/cow-fi/data/cow-swap/const.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import IMG_COWSWAP_NOFEES from '@cowprotocol/assets/images/image-cowswap-nofees.
import IMG_COWSWAP_SWAPS from '@cowprotocol/assets/images/image-cowswap-swaps.svg'
import IMG_COWSWAP_TWAP from '@cowprotocol/assets/images/image-cowswap-twap.svg'
import IMG_COWSWAP_UX from '@cowprotocol/assets/images/image-cowswap-ux.svg'
import { Color, UI } from '@cowprotocol/ui'
import { getAvailableChainsText } from '@cowprotocol/common-const'
import { Color, UI } from '@cowprotocol/ui'

import { CowFiCategory } from 'src/common/analytics/types'

import { Link } from '@/components/Link'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/* eslint-disable no-restricted-imports */ // TODO: Don't use 'modules' import
import { useMemo } from 'react'

import { useTokenByAddress } from '@cowprotocol/tokens'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { AccountType } from '@cowprotocol/types'

import { render } from '@testing-library/react'

import { BridgingEnabledUpdater } from './BridgingEnabledUpdater'

import { Routes } from '../constants/routes'

jest.mock('@cowprotocol/common-hooks', () => ({
...jest.requireActual('@cowprotocol/common-hooks'),
useSetIsBridgingEnabled: jest.fn(),
}))

jest.mock('@cowprotocol/wallet', () => ({
...jest.requireActual('@cowprotocol/wallet'),
useWalletInfo: jest.fn(),
useAccountType: jest.fn(),
}))

jest.mock('modules/trade', () => ({
...jest.requireActual('modules/trade'),
useTradeTypeInfo: jest.fn(),
}))

const { useSetIsBridgingEnabled } = require('@cowprotocol/common-hooks')
const mockUseSetIsBridgingEnabled = useSetIsBridgingEnabled as jest.MockedFunction<typeof useSetIsBridgingEnabled>
const { useWalletInfo, useAccountType } = require('@cowprotocol/wallet')

const mockUseWalletInfo = useWalletInfo as jest.MockedFunction<typeof useWalletInfo>
const mockUseAccountType = useAccountType as jest.MockedFunction<typeof useAccountType>
const { useTradeTypeInfo } = require('modules/trade')
const mockUseTradeTypeInfo = useTradeTypeInfo as jest.MockedFunction<typeof useTradeTypeInfo>

describe('BridgingEnabledUpdater', () => {
const setIsBridgingEnabled = jest.fn()

beforeEach(() => {
jest.clearAllMocks()
mockUseSetIsBridgingEnabled.mockReturnValue(setIsBridgingEnabled)
mockUseWalletInfo.mockReturnValue({ account: '0x123' })
mockUseAccountType.mockReturnValue(AccountType.EOA)
mockUseTradeTypeInfo.mockReturnValue({ route: Routes.SWAP })
})

it('disables bridging for smart contract wallets', () => {
mockUseAccountType.mockReturnValue(AccountType.SMART_CONTRACT)

render(<BridgingEnabledUpdater />)

expect(setIsBridgingEnabled).toHaveBeenCalledWith(false)
})

it('enables bridging on swap route for a compatible wallet', () => {
render(<BridgingEnabledUpdater />)

expect(setIsBridgingEnabled).toHaveBeenCalledWith(true)
})

it('disables bridging on non-swap routes', () => {
mockUseTradeTypeInfo.mockReturnValue({ route: Routes.LIMIT_ORDER })

render(<BridgingEnabledUpdater />)

expect(setIsBridgingEnabled).toHaveBeenCalledWith(false)
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ export function BridgingEnabledUpdater(): null {
const setIsBridgingEnabled = useSetIsBridgingEnabled()

const isSwapRoute = tradeTypeInfo?.route === Routes.SWAP

const isWalletCompatible = Boolean(account ? accountType !== AccountType.SMART_CONTRACT : true)
const shouldEnableBridging = isWalletCompatible && isSwapRoute

Expand Down
1 change: 1 addition & 0 deletions apps/cowswap-frontend/src/entities/bridgeProvider/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export { useBridgeSupportedNetworks, useBridgeSupportedNetwork } from './useBridgeSupportedNetworks'
export { useBridgeSupportedTokens } from './useBridgeSupportedTokens'
export { useRoutesAvailability } from './useRoutesAvailability'
export { BridgeProvidersUpdater } from './BridgeProvidersUpdater'
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
import { useMemo } from 'react'

import { SWR_NO_REFRESH_OPTIONS } from '@cowprotocol/common-const'
import { useIsBridgingEnabled } from '@cowprotocol/common-hooks'
import { SupportedChainId } from '@cowprotocol/cow-sdk'

import useSWR from 'swr'
import { bridgingSdk } from 'tradingSdk/bridgingSdk'

import { useBridgeProvidersIds } from './useBridgeProvidersIds'

export interface RoutesAvailabilityResult {
unavailableChainIds: Set<number>
loadingChainIds: Set<number>
isLoading: boolean
}

const EMPTY_RESULT: RoutesAvailabilityResult = {
unavailableChainIds: new Set(),
loadingChainIds: new Set(),
isLoading: false,
}

interface RouteCheckResult {
chainId: number
isAvailable: boolean
}

/**
* Pre-checks route availability for multiple destination chains from a source chain.
* Returns which chains have unavailable routes and which are still loading.
*
* Note: Fires parallel requests for all destination chains without throttling.
* This is acceptable because:
* - SWR caches results, so repeated opens don't re-fetch
* - Chain count is limited (~10-15 max)
* - Requests are lightweight (token existence checks)
* If this becomes a bottleneck, consider batching or sequential fetching.
*/
export function useRoutesAvailability(
sourceChainId: SupportedChainId | undefined,
destinationChainIds: number[],
): RoutesAvailabilityResult {
const isBridgingEnabled = useIsBridgingEnabled()
const providerIds = useBridgeProvidersIds()
const providersKey = providerIds.join('|')

// Filter out the source chain (same-chain swaps are always available)
const chainsToCheck = useMemo(
() => destinationChainIds.filter((id) => id !== sourceChainId),
[destinationChainIds, sourceChainId],
)

// Create a stable key for the SWR request
const swrKey = useMemo(() => {
if (!isBridgingEnabled || !sourceChainId || chainsToCheck.length === 0) {
return null
}
return [sourceChainId, chainsToCheck.sort().join(','), providersKey, 'useRoutesAvailability']
}, [isBridgingEnabled, sourceChainId, chainsToCheck, providersKey])

const { data, isLoading } = useSWR<RouteCheckResult[]>(
swrKey,
async (key) => {
const [sellChainId, chainIdsString] = key as [SupportedChainId, string, string, string]
const chainIds = chainIdsString.split(',').map(Number)

// Check routes in parallel for all destination chains
const results = await Promise.all(
chainIds.map(async (buyChainId: number): Promise<RouteCheckResult> => {
try {
const result = await bridgingSdk.getBuyTokens({ sellChainId, buyChainId })
const isAvailable = result.tokens.length > 0 && result.isRouteAvailable
return { chainId: buyChainId, isAvailable }
} catch (error) {
console.warn(`[useRoutesAvailability] Failed to check route ${sellChainId} -> ${buyChainId}`, error)
// Treat errors as unavailable routes
return { chainId: buyChainId, isAvailable: false }
}
}),
)

return results
},
SWR_NO_REFRESH_OPTIONS,
)

return useMemo(() => {
if (!swrKey) {
return EMPTY_RESULT
}

if (isLoading || !data) {
// While loading, mark all chains being checked as loading
return {
unavailableChainIds: new Set(),
loadingChainIds: new Set(chainsToCheck),
isLoading: true,
}
}

const unavailableChainIds = new Set<number>(
data.filter((result) => !result.isAvailable).map((result) => result.chainId),
)

return {
unavailableChainIds,
loadingChainIds: new Set(),
isLoading: false,
}
}, [swrKey, isLoading, data, chainsToCheck])
}
91 changes: 90 additions & 1 deletion apps/cowswap-frontend/src/locales/es-ES.po
Original file line number Diff line number Diff line change
Expand Up @@ -4212,6 +4212,14 @@ msgstr "Habilitar aprobación parcial"
msgid "Version"
msgstr "Versión"

#: apps/cowswap-frontend/src/modules/tokensList/pure/TokensVirtualList/index.tsx
msgid "Recent"
msgstr "Recientes"

#: apps/cowswap-frontend/src/modules/tokensList/pure/TokensVirtualList/index.tsx
msgid "Clear"
msgstr "Borrar"

#: apps/cowswap-frontend/src/pages/Account/Tokens/TokensOverview.tsx
msgid "All tokens"
msgstr "Todos los tokens"
Expand Down Expand Up @@ -5211,7 +5219,7 @@ msgstr "parte"

#: apps/cowswap-frontend/src/modules/swap/pure/CrossChainUnlockScreen/index.tsx
msgid "Cross-chain swaps are here"
msgstr "Los swaps de cadena media están aquí"
msgstr "Los swaps entre cadenas están aquí"

#: apps/cowswap-frontend/src/modules/erc20Approve/containers/ApprovalAmountInput/ApprovalAmountInput.tsx
#~ msgid "Approval amount:"
Expand Down Expand Up @@ -6294,3 +6302,84 @@ msgstr "Aprende más"
msgid "Swap and bridge costs are at least {formattedFeePercentage}% of the swap amount"
msgstr "Los costos de intercambio y puente son por lo menos {formattedFeePercentage}% del monto de intercambio"

# Receive amount labels
msgid "Receive (incl. fees)"
msgstr "Recibir (incl. comisiones)"

msgid "From (incl. fees)"
msgstr "De (incl. comisiones)"

# Notifications / jobs aria labels
msgid "Trade alert settings"
msgstr "Configuración de alertas de trading"

msgid "View jobs (opens in a new tab)"
msgstr "Ver trabajos (se abre en una pestaña nueva)"

#: apps/cowswap-frontend/src/modules/tokensList/pure/ChainPanel/index.tsx
msgid "Search network"
msgstr "Buscar red"

#: apps/cowswap-frontend/src/modules/tokensList/containers/SelectTokenWidget/controllerState.ts
msgid "Select token"
msgstr "Seleccionar token"

#: apps/cowswap-frontend/src/modules/tokensList/containers/SelectTokenWidget/controllerState.ts
msgid "From network"
msgstr "Red de origen"

#: apps/cowswap-frontend/src/modules/tokensList/containers/SelectTokenWidget/controllerState.ts
msgid "To network"
msgstr "Red de destino"

#: apps/cowswap-frontend/src/modules/tokensList/containers/SelectTokenWidget/controllerState.ts
msgid "Select network"
msgstr "Seleccionar red"

#: apps/cowswap-frontend/src/modules/tokensList/pure/SelectTokenModal/index.tsx
msgid "Cross chain swap"
msgstr "Swap entre cadenas"

#: apps/cowswap-frontend/src/modules/tokensList/containers/SelectTokenWidget/controllerState.ts
msgid "Swap from"
msgstr "Swap desde"

#: apps/cowswap-frontend/src/modules/tokensList/containers/SelectTokenWidget/controllerState.ts
msgid "Swap to"
msgstr "Swap a"

#: apps/cowswap-frontend/src/modules/tokensList/containers/SelectTokenWidget/controllerState.ts
msgid "Sell token"
msgstr "Vender token"

#: apps/cowswap-frontend/src/modules/tokensList/containers/SelectTokenWidget/controllerState.ts
msgid "Buy token"
msgstr "Comprar token"

#: apps/cowswap-frontend/src/modules/tokensList/pure/SelectTokenModal/helpers.tsx
msgid "Manage token lists"
msgstr "Gestionar listas de tokens"

#: apps/cowswap-frontend/src/modules/tokensList/pure/ChainPanel/index.tsx
msgid "No networks available for this trade."
msgstr "No hay redes disponibles para este intercambio."

#: apps/cowswap-frontend/src/modules/tokensList/pure/ChainPanel/index.tsx
msgid "No networks match {chainQuery}."
msgstr "No hay redes que coincidan con {chainQuery}."

#: apps/cowswap-frontend/src/modules/tokensList/pure/SelectTokenModal/MobileChainSelector.tsx
msgid "View all ({totalChains})"
msgstr "Ver todas ({totalChains})"

#: apps/cowswap-frontend/src/modules/tokensList/pure/SelectTokenModal/MobileChainSelector.tsx
msgid "View all {totalChains} networks"
msgstr "Ver todas las {totalChains} redes"

#: apps/cowswap-frontend/src/modules/tokensList/pure/SelectTokenModal/MobileChainSelector.tsx
msgid "Selected network {activeChainLabel}"
msgstr "Red seleccionada {activeChainLabel}"

#: apps/cowswap-frontend/src/modules/tokensList/pure/ChainsSelector/index.tsx
msgid "This destination is not supported for this source chain"
msgstr "Este destino no es compatible con esta red de origen"
Loading