1
- import React , { useCallback , useState } from 'react'
1
+ import React , { useState } from 'react'
2
2
import { GestureHandlerRootView } from 'react-native-gesture-handler'
3
- import { TokenUnit } from '@avalabs/core-utils-sdk'
4
3
import { ScrollView , Text , View } from '../Primitives'
5
- import { Icons , useTheme } from '../..'
6
- import { TokenAmountInputWidget } from './TokenAmountInputWidget'
7
- import { TokenAmountInput } from './TokenAmountInput'
4
+ import { useTheme } from '../..'
5
+ import { TokenAmount , TokenAmountInput } from './TokenAmountInput'
8
6
9
7
export default {
10
8
title : 'Token Amount Input'
@@ -27,112 +25,31 @@ export const All = (): JSX.Element => {
27
25
} }
28
26
contentContainerStyle = { { padding : 16 , gap : 40 } }
29
27
keyboardShouldPersistTaps = "always" >
30
- < TokenAmountInputStory />
31
- < StakingTokenAmountInputWidgetStory />
32
- < SwapTokenAmountInputWidgetStory />
28
+ < TokenUnitInputStory />
33
29
</ ScrollView >
34
30
</ GestureHandlerRootView >
35
31
)
36
32
}
37
33
38
- const TokenAmountInputStory = ( ) : JSX . Element => {
39
- const [ amount , setAmount ] = useState < TokenUnit | undefined > (
40
- new TokenUnit ( 1000000000 , xpChainToken . maxDecimals , xpChainToken . symbol )
41
- )
34
+ const TokenUnitInputStory = ( ) : JSX . Element => {
35
+ const [ amount , setAmount ] = useState < TokenAmount > ( )
42
36
43
- const handleChange = ( value : TokenUnit ) : void => {
37
+ const handleChange = ( value : TokenAmount ) : void => {
44
38
setAmount ( value )
45
39
}
46
40
47
41
return (
48
42
< View sx = { { gap : 12 } } >
49
- < Text variant = "heading6" > Amount Input: { amount ?. toString ( ) } AVAX</ Text >
43
+ < Text variant = "heading6" > Amount Input: { amount ?. valueString } AVAX</ Text >
50
44
< TokenAmountInput
51
- amount = { amount }
52
- token = { xpChainToken }
45
+ value = { amount ?. value }
46
+ denomination = { xpChainToken . maxDecimals }
53
47
onChange = { handleChange }
54
- formatInCurrency = { testFormatInCurrency }
55
- />
56
- </ View >
57
- )
58
- }
59
-
60
- const StakingTokenAmountInputWidgetStory = ( ) : JSX . Element => {
61
- const [ stakeAmount , setStakeAmount ] = useState < TokenUnit | undefined > (
62
- new TokenUnit ( 25000000000 , xpChainToken . maxDecimals , xpChainToken . symbol )
63
- )
64
-
65
- const handleChange = ( amount : TokenUnit ) : void => {
66
- setStakeAmount ( amount )
67
- }
68
-
69
- const validateStakingAmount = useCallback ( async ( amount : TokenUnit ) => {
70
- if ( ! amount . isZero ( ) && amount . lt ( minStakeAmount ) ) {
71
- throw new Error (
72
- `Minimum amount to stake is ${ minStakeAmount . toString ( ) } AVAX`
73
- )
74
- } else if ( amount . gt ( balanceInAvax ) ) {
75
- throw new Error (
76
- 'The specified staking amount exceeds the available balance'
77
- )
78
- }
79
- } , [ ] )
80
-
81
- // we can't stake the full amount because of fees
82
- // to give a good user experience, when user presses max
83
- // we will stake 99.99% of the balance
84
- // this is to ensure that the user has enough balance to cover the fees
85
- const STAKING_MAX_BALANCE_PERCENTAGE = 0.9999
86
-
87
- return (
88
- < View sx = { { gap : 12 } } >
89
- < Text variant = "heading6" >
90
- Staking Amount Input Widget: { stakeAmount ?. toString ( ) } AVAX
91
- </ Text >
92
- < TokenAmountInputWidget
93
- amount = { stakeAmount }
94
- token = { xpChainToken }
95
- balance = { balanceInAvax }
96
- formatInCurrency = { testFormatInCurrency }
97
- onChange = { handleChange }
98
- maxPercentage = { STAKING_MAX_BALANCE_PERCENTAGE }
99
- validateAmount = { validateStakingAmount }
100
- />
101
- </ View >
102
- )
103
- }
104
-
105
- const SwapTokenAmountInputWidgetStory = ( ) : JSX . Element => {
106
- const { theme } = useTheme ( )
107
- const [ swapAmount , setSwapAmount ] = useState < TokenUnit | undefined > ( undefined )
108
-
109
- const handleChange = ( amount : TokenUnit ) : void => {
110
- setSwapAmount ( amount )
111
- }
112
-
113
- const validateSwapAmount = useCallback ( async ( amount : TokenUnit ) => {
114
- if ( amount . gt ( balanceInAvax ) ) {
115
- throw new Error ( 'The specified swap amount exceeds the available balance' )
116
- }
117
- } , [ ] )
118
-
119
- const renderAccessory = useCallback ( ( ) => {
120
- return < Icons . Custom . Switch color = { theme . colors . $textPrimary } />
121
- } , [ theme ] )
122
-
123
- return (
124
- < View sx = { { gap : 12 } } >
125
- < Text variant = "heading6" >
126
- Swap Amount Input Widget: { swapAmount ?. toString ( ) } AVAX
127
- </ Text >
128
- < TokenAmountInputWidget
129
- amount = { swapAmount }
130
- token = { ethereumToken }
131
- balance = { balanceInAvax }
132
- formatInCurrency = { testFormatInCurrency }
133
- onChange = { handleChange }
134
- validateAmount = { validateSwapAmount }
135
- accessory = { renderAccessory ( ) }
48
+ placeholder = "0.00"
49
+ style = { {
50
+ fontFamily : 'Aeonik-Medium' ,
51
+ fontSize : 60
52
+ } }
136
53
/>
137
54
</ View >
138
55
)
@@ -142,25 +59,3 @@ const xpChainToken = {
142
59
maxDecimals : 9 ,
143
60
symbol : 'AVAX'
144
61
}
145
-
146
- const ethereumToken = {
147
- maxDecimals : 18 ,
148
- symbol : 'ETH'
149
- }
150
-
151
- const testFormatInCurrency = ( amount : TokenUnit ) : string => {
152
- const nativeTokenPrice = 22.0
153
- return `$${ amount . mul ( nativeTokenPrice ) . toDisplay ( { fixedDp : 2 } ) } USD`
154
- }
155
-
156
- const balanceInAvax = new TokenUnit (
157
- 28142000000 ,
158
- xpChainToken . maxDecimals ,
159
- xpChainToken . symbol
160
- )
161
-
162
- const minStakeAmount = new TokenUnit (
163
- 0 ,
164
- xpChainToken . maxDecimals ,
165
- xpChainToken . symbol
166
- ) . add ( 25 )
0 commit comments