1
1
import {
2
2
CHAIN_ID_ACALA ,
3
3
CHAIN_ID_KARURA ,
4
+ CHAIN_ID_NEON ,
4
5
CHAIN_ID_TERRA ,
5
6
hexToNativeAssetString ,
6
7
isEVMChain ,
@@ -32,6 +33,7 @@ import {
32
33
} from "../store/selectors" ;
33
34
import { setRelayerFee , setUseRelayer } from "../store/transferSlice" ;
34
35
import { CHAINS_BY_ID , getDefaultNativeCurrencySymbol } from "../utils/consts" ;
36
+ import { useNeonRelayerInfo } from "../hooks/useNeonRelayerInfo" ;
35
37
36
38
const useStyles = makeStyles ( ( theme ) => ( {
37
39
feeSelectorContainer : {
@@ -107,6 +109,11 @@ function FeeMethodSelector() {
107
109
vaaNormalizedAmount ,
108
110
originChain ? hexToNativeAssetString ( originAsset , originChain ) : undefined
109
111
) ;
112
+ const neonRelayerInfo = useNeonRelayerInfo (
113
+ targetChain ,
114
+ vaaNormalizedAmount ,
115
+ originChain ? hexToNativeAssetString ( originAsset , originChain ) : undefined
116
+ ) ;
110
117
const sourceChain = useSelector ( selectTransferSourceChain ) ;
111
118
const dispatch = useDispatch ( ) ;
112
119
const relayerSelected = ! ! useSelector ( selectTransferUseRelayer ) ;
@@ -123,13 +130,23 @@ function FeeMethodSelector() {
123
130
targetChain === CHAIN_ID_ACALA || targetChain === CHAIN_ID_KARURA ;
124
131
const acalaRelayerEligible = acalaRelayerInfo . data ?. shouldRelay ;
125
132
133
+ const targetIsNeon = targetChain === CHAIN_ID_NEON ;
134
+ const neonRelayerEligible = neonRelayerInfo . data ?. shouldRelay ;
135
+
126
136
const chooseAcalaRelayer = useCallback ( ( ) => {
127
137
if ( targetIsAcala && acalaRelayerEligible ) {
128
138
dispatch ( setUseRelayer ( true ) ) ;
129
139
dispatch ( setRelayerFee ( undefined ) ) ;
130
140
}
131
141
} , [ dispatch , targetIsAcala , acalaRelayerEligible ] ) ;
132
142
143
+ const chooseNeonRelayer = useCallback ( ( ) => {
144
+ if ( targetIsNeon && neonRelayerEligible ) {
145
+ dispatch ( setUseRelayer ( true ) ) ;
146
+ dispatch ( setRelayerFee ( undefined ) ) ;
147
+ }
148
+ } , [ dispatch , targetIsNeon , neonRelayerEligible ] ) ;
149
+
133
150
const chooseRelayer = useCallback ( ( ) => {
134
151
if ( relayerEligible ) {
135
152
dispatch ( setUseRelayer ( true ) ) ;
@@ -149,66 +166,84 @@ function FeeMethodSelector() {
149
166
} else {
150
167
chooseManual ( ) ;
151
168
}
169
+ } else if ( targetIsNeon ) {
170
+ if ( neonRelayerEligible ) {
171
+ chooseNeonRelayer ( ) ;
172
+ } else {
173
+ chooseManual ( ) ;
174
+ }
152
175
} else if ( relayerInfo . data ?. isRelayable === true ) {
153
176
chooseRelayer ( ) ;
154
177
} else if ( relayerInfo . data ?. isRelayable === false ) {
155
178
chooseManual ( ) ;
156
179
}
157
180
//If it's undefined / null it's still loading, so no action is taken.
158
- } , [
159
- relayerInfo ,
181
+ } , [ relayerInfo ,
160
182
chooseRelayer ,
161
183
chooseManual ,
162
184
targetIsAcala ,
163
185
acalaRelayerEligible ,
164
186
chooseAcalaRelayer ,
165
- ] ) ;
187
+ targetIsNeon ,
188
+ neonRelayerEligible ,
189
+ chooseNeonRelayer ] ) ;
166
190
167
- const acalaRelayerContent = (
168
- < Card
169
- className = {
170
- classes . optionCardBase +
171
- " " +
172
- ( relayerSelected ? classes . optionCardSelected : "" ) +
173
- " " +
174
- ( acalaRelayerEligible ? classes . optionCardSelectable : "" )
175
- }
176
- onClick = { chooseAcalaRelayer }
177
- >
178
- < div className = { classes . alignCenterContainer } >
179
- < Checkbox
180
- checked = { relayerSelected }
181
- disabled = { ! acalaRelayerEligible }
182
- onClick = { chooseAcalaRelayer }
183
- className = { classes . inlineBlock }
184
- />
185
- < div className = { clsx ( classes . inlineBlock , classes . alignLeft ) } >
186
- { acalaRelayerEligible ? (
187
- < div >
188
- < Typography variant = "body1" >
189
- { CHAINS_BY_ID [ targetChain ] . name }
190
- </ Typography >
191
- < Typography variant = "body2" color = "textSecondary" >
192
- { CHAINS_BY_ID [ targetChain ] . name } pays gas for you & #127881 ;
193
- </ Typography >
194
- </ div >
195
- ) : (
196
- < >
197
- < Typography color = "textSecondary" variant = "body2" >
198
- { "Automatic redeem is unavailable for this token." }
199
- </ Typography >
200
- < div />
201
- </ >
202
- ) }
191
+ const relayerContentFactory = ( relayerEligible : any , chooseRelayer : any ) => {
192
+ return (
193
+ < Card
194
+ className = {
195
+ classes . optionCardBase +
196
+ " " +
197
+ ( relayerSelected ? classes . optionCardSelected : "" ) +
198
+ " " +
199
+ ( relayerEligible ? classes . optionCardSelectable : "" )
200
+ }
201
+ onClick = { chooseRelayer }
202
+ >
203
+ < div className = { classes . alignCenterContainer } >
204
+ < Checkbox
205
+ checked = { relayerSelected }
206
+ disabled = { ! relayerEligible }
207
+ onClick = { chooseRelayer }
208
+ className = { classes . inlineBlock }
209
+ />
210
+ < div className = { clsx ( classes . inlineBlock , classes . alignLeft ) } >
211
+ { relayerEligible ? (
212
+ < >
213
+ < Typography variant = "body1" >
214
+ { CHAINS_BY_ID [ targetChain ] . name }
215
+ </ Typography >
216
+ < Typography variant = "body2" color = "textSecondary" >
217
+ { CHAINS_BY_ID [ targetChain ] . name } pays gas for you & #127881 ;
218
+ </ Typography >
219
+ </ >
220
+ ) : (
221
+ < >
222
+ < Typography color = "textSecondary" variant = "body2" >
223
+ { "Automatic redeem is unavailable for this token." }
224
+ </ Typography >
225
+ < div />
226
+ </ >
227
+ ) }
228
+ </ div >
203
229
</ div >
204
- </ div >
205
- { acalaRelayerEligible ? (
206
- < >
207
- < div > </ div >
208
- < div > </ div >
209
- </ >
210
- ) : null }
211
- </ Card >
230
+ { relayerEligible ? (
231
+ < >
232
+ < div > </ div >
233
+ < div > </ div >
234
+ </ >
235
+ ) : null }
236
+ </ Card >
237
+ ) ;
238
+ } ;
239
+
240
+ const acalaRelayerContent = relayerContentFactory (
241
+ acalaRelayerEligible ,
242
+ chooseAcalaRelayer
243
+ ) ;
244
+ const neonRelayerContent = relayerContentFactory (
245
+ neonRelayerEligible ,
246
+ chooseNeonRelayer
212
247
) ;
213
248
214
249
const relayerContent = (
@@ -323,7 +358,11 @@ function FeeMethodSelector() {
323
358
>
324
359
How would you like to pay the target chain fees?
325
360
</ Typography >
326
- { targetIsAcala ? acalaRelayerContent : relayerContent }
361
+ { targetIsAcala
362
+ ? acalaRelayerContent
363
+ : targetIsNeon
364
+ ? neonRelayerContent
365
+ : relayerContent }
327
366
{ manualRedeemContent }
328
367
</ div >
329
368
) ;
0 commit comments