@huma-finance/widgets 0.0.27 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/.env.example +2 -2
  2. package/.eslintignore +2 -2
  3. package/.eslintrc.js +64 -64
  4. package/.prettierignore +4 -4
  5. package/.prettierrc.js +16 -16
  6. package/API.md +332 -332
  7. package/LICENSE +660 -660
  8. package/README.md +48 -48
  9. package/babel.config.js +15 -15
  10. package/config-overrides.js +9 -9
  11. package/cosmos.config.json +7 -7
  12. package/cypress/e2e/01-invoice-factoring-borrow.test.ts +62 -62
  13. package/cypress/support/e2e.ts +76 -76
  14. package/cypress/support/ethereum.ts +142 -142
  15. package/cypress/tsconfig.json +9 -9
  16. package/cypress/utils/index.ts +54 -54
  17. package/cypress.config.ts +20 -20
  18. package/dist/cjs/index.cjs +253 -153
  19. package/dist/cjs/index.cjs.map +1 -1
  20. package/dist/index.d.ts +193 -193
  21. package/dist/index.js +254 -154
  22. package/dist/index.js.map +1 -1
  23. package/jsdoc2md.json +20 -20
  24. package/package.json +4 -4
  25. package/public/index.html +40 -40
  26. package/public/manifest.json +25 -25
  27. package/public/robots.txt +3 -3
  28. package/rollup.config.js +81 -81
  29. package/src/components/Activity.tsx +132 -132
  30. package/src/components/ApolloWrapper.tsx +15 -15
  31. package/src/components/ApproveAllowanceModal.tsx +121 -121
  32. package/src/components/BottomButton.tsx +33 -33
  33. package/src/components/ChainNotSupportedModal.tsx +33 -33
  34. package/src/components/ConfirmTransferModal.tsx +153 -153
  35. package/src/components/CreditLine/borrow/1-Evaluation.tsx +157 -157
  36. package/src/components/CreditLine/borrow/2-ChooseAmount.tsx +68 -68
  37. package/src/components/CreditLine/borrow/3-Transfer.tsx +44 -44
  38. package/src/components/CreditLine/borrow/4-ApproveAllowance.tsx +29 -29
  39. package/src/components/CreditLine/borrow/5-Success.tsx +30 -30
  40. package/src/components/CreditLine/borrow/index.tsx +117 -117
  41. package/src/components/CreditLine/payment/1-ChooseAmount.tsx +67 -67
  42. package/src/components/CreditLine/payment/2-ApproveAllowance.tsx +23 -23
  43. package/src/components/CreditLine/payment/3-Transfer.tsx +34 -34
  44. package/src/components/CreditLine/payment/4-Success.tsx +39 -39
  45. package/src/components/CreditLine/payment/index.tsx +94 -94
  46. package/src/components/ErrorModal.tsx +132 -132
  47. package/src/components/Factoring/FactoredList.tsx +143 -143
  48. package/src/components/Factoring/UpcomingList.tsx +90 -90
  49. package/src/components/Factoring/index.ts +2 -2
  50. package/src/components/HumaLoading.tsx +68 -68
  51. package/src/components/HumaTable.tsx +158 -158
  52. package/src/components/InvoiceFactoring/borrow/1-Evaluation.tsx +49 -49
  53. package/src/components/InvoiceFactoring/borrow/2-ChooseAmount.tsx +88 -88
  54. package/src/components/InvoiceFactoring/borrow/3-ConfirmTransfer.tsx +37 -37
  55. package/src/components/InvoiceFactoring/borrow/4-ApproveNFT.tsx +55 -55
  56. package/src/components/InvoiceFactoring/borrow/5-Transfer.tsx +34 -34
  57. package/src/components/InvoiceFactoring/borrow/6-Success.tsx +20 -20
  58. package/src/components/InvoiceFactoring/borrow/index.tsx +94 -94
  59. package/src/components/InvoiceFactoring/payment/1-ChooseAmount.tsx +67 -67
  60. package/src/components/InvoiceFactoring/payment/2-ApproveAllowance.tsx +23 -23
  61. package/src/components/InvoiceFactoring/payment/3-Transfer.tsx +34 -34
  62. package/src/components/InvoiceFactoring/payment/4-Success.tsx +23 -23
  63. package/src/components/InvoiceFactoring/payment/index.tsx +86 -86
  64. package/src/components/Lend/supply/1-Evaluation.tsx +171 -171
  65. package/src/components/Lend/supply/2-ChooseAmount.tsx +70 -70
  66. package/src/components/Lend/supply/3-ApproveAllowance.tsx +25 -25
  67. package/src/components/Lend/supply/4-ConfirmTransfer.tsx +104 -104
  68. package/src/components/Lend/supply/6-Transfer.tsx +32 -32
  69. package/src/components/Lend/supply/7-Success.tsx +49 -49
  70. package/src/components/Lend/supply/index.tsx +144 -144
  71. package/src/components/Lend/withdraw/1-CheckWithdrawble.tsx +73 -73
  72. package/src/components/Lend/withdraw/2-ChooseAmount.tsx +50 -50
  73. package/src/components/Lend/withdraw/3-Transfer.tsx +32 -32
  74. package/src/components/Lend/withdraw/4-Success.tsx +49 -49
  75. package/src/components/Lend/withdraw/index.tsx +101 -101
  76. package/src/components/LoadingModal.tsx +49 -49
  77. package/src/components/StreamFactoring/borrow/1-Evaluation.tsx +55 -55
  78. package/src/components/StreamFactoring/borrow/2-ChooseAmount.tsx +127 -127
  79. package/src/components/StreamFactoring/borrow/3-ConfirmTransfer.tsx +42 -42
  80. package/src/components/StreamFactoring/borrow/4-ApproveAllowance.tsx +33 -33
  81. package/src/components/StreamFactoring/borrow/5-Permit.tsx +144 -144
  82. package/src/components/StreamFactoring/borrow/6-Transfer.tsx +37 -37
  83. package/src/components/StreamFactoring/borrow/7-Success.tsx +20 -20
  84. package/src/components/StreamFactoring/borrow/index.tsx +94 -94
  85. package/src/components/StreamFactoring/payment/ChooseAmount.tsx +54 -54
  86. package/src/components/StreamFactoring/payment/Success.tsx +23 -23
  87. package/src/components/StreamFactoring/payment/Transfer.tsx +34 -34
  88. package/src/components/StreamFactoring/payment/index.tsx +66 -66
  89. package/src/components/SuperfluidFactoring/SuperfluidFactoredList.tsx +70 -70
  90. package/src/components/SuperfluidFactoring/SuperfluidUpcomingList.tsx +167 -167
  91. package/src/components/SuperfluidFactoring/index.tsx +85 -85
  92. package/src/components/TxDoneModal.tsx +83 -83
  93. package/src/components/TxSendModal.tsx +59 -59
  94. package/src/components/ViewOnExplorer.tsx +26 -26
  95. package/src/components/WidgetWrapper.tsx +74 -74
  96. package/src/components/WrapperModal.tsx +54 -54
  97. package/src/components/buttons/TableActionButton.tsx +36 -36
  98. package/src/components/buttons/index.ts +1 -1
  99. package/src/components/humaModal/HumaModal.tsx +68 -68
  100. package/src/components/humaModal/HumaModalHeader.tsx +70 -70
  101. package/src/components/humaModal/index.tsx +2 -2
  102. package/src/components/icons/approve-lender.svg +30 -30
  103. package/src/components/icons/auto-payback.svg +40 -40
  104. package/src/components/icons/check-circle.svg +3 -3
  105. package/src/components/icons/check-green.svg +3 -3
  106. package/src/components/icons/check.svg +10 -10
  107. package/src/components/icons/donut.svg +904 -904
  108. package/src/components/icons/ellipse.svg +3 -3
  109. package/src/components/icons/huma-full.svg +22 -22
  110. package/src/components/icons/huma.svg +15 -15
  111. package/src/components/icons/index.tsx +93 -93
  112. package/src/components/icons/loader.svg +229 -229
  113. package/src/components/icons/metamask.svg +31 -31
  114. package/src/components/icons/polygon.svg +16 -16
  115. package/src/components/icons/receipt.svg +3 -3
  116. package/src/components/icons/separator.svg +3 -3
  117. package/src/components/icons/sorry.svg +31 -31
  118. package/src/components/icons/usdc.svg +5 -5
  119. package/src/components/icons/wallet-connect.svg +11 -11
  120. package/src/cosmos/CreditLineBorrow.fixture.tsx +86 -86
  121. package/src/cosmos/CreditLinePayment.fixture.tsx +50 -50
  122. package/src/cosmos/InvoiceFactoringBorrow.fixture.tsx +111 -111
  123. package/src/cosmos/InvoiceFactoringPayment.fixture.tsx +67 -67
  124. package/src/cosmos/LendSupply.fixture.tsx +75 -75
  125. package/src/cosmos/LendWithdraw.fixture.tsx +43 -43
  126. package/src/cosmos/SuperfluidFactoringBorrow.fixture.tsx +15 -15
  127. package/src/cosmos/WalletWrapper.tsx +52 -52
  128. package/src/cosmos/abis/InvoiceNFT.json +644 -644
  129. package/src/cosmos/abis/ReceivableFactoringPool.json +1529 -1529
  130. package/src/cosmos/utils/env.ts +6 -6
  131. package/src/cosmos/utils/index.ts +169 -169
  132. package/src/fonts/Recoleta/Recoleta-Black.otf +0 -0
  133. package/src/fonts/Recoleta/Recoleta-Bold.otf +0 -0
  134. package/src/fonts/Recoleta/Recoleta-Light.otf +0 -0
  135. package/src/fonts/Recoleta/Recoleta-Medium.otf +0 -0
  136. package/src/fonts/Recoleta/Recoleta-Regular.otf +0 -0
  137. package/src/fonts/Recoleta/Recoleta-RegularDEMO.otf +0 -0
  138. package/src/fonts/Recoleta/Recoleta-SemiBold.otf +0 -0
  139. package/src/fonts/Recoleta/Recoleta-Thin.otf +0 -0
  140. package/src/hooks/useEA.ts +53 -53
  141. package/src/hooks/useRedux.ts +6 -6
  142. package/src/index.css +61 -61
  143. package/src/index.tsx +301 -301
  144. package/src/react-app-env.d.ts +1 -1
  145. package/src/reportWebVitals.ts +15 -15
  146. package/src/setupTests.ts +6 -6
  147. package/src/store/index.ts +27 -27
  148. package/src/store/widgets.reducers.ts +120 -120
  149. package/src/store/widgets.selectors.ts +3 -3
  150. package/src/store/widgets.store.ts +54 -54
  151. package/src/theme/breakpoints.ts +10 -10
  152. package/src/theme/components.ts +70 -70
  153. package/src/theme/coreThemeConstants.ts +29 -29
  154. package/src/theme/cssMixins.ts +92 -92
  155. package/src/theme/hooks/useGetSizes.ts +31 -31
  156. package/src/theme/index.ts +24 -24
  157. package/src/theme/palette.ts +150 -150
  158. package/src/theme/shape.ts +7 -7
  159. package/src/theme/theme.types.ts +80 -80
  160. package/src/theme/typography.ts +117 -117
  161. package/src/utilTypes.d.ts +31 -31
  162. package/src/utils/env.ts +10 -10
  163. package/tsconfig.build.json +7 -7
  164. package/tsconfig.json +32 -32
  165. package/webpack.cosmos.js +54 -54
@@ -1,157 +1,157 @@
1
- import { Box, Button, css, Typography, useTheme } from '@mui/material'
2
- import { useWeb3React } from '@web3-react/core'
3
- import { PoolInfoType } from '@huma-finance/shared'
4
- import React, { useEffect, useState } from 'react'
5
-
6
- import useEA from '../../../hooks/useEA'
7
- import { useAppDispatch } from '../../../hooks/useRedux'
8
- import { setStep } from '../../../store/widgets.reducers'
9
- import { WIDGET_STEP } from '../../../store/widgets.store'
10
- import { CheckCircleIcon, CheckGreenIcon } from '../../icons'
11
- import spinner from '../../icons/spinner.gif'
12
-
13
- type Props = {
14
- poolInfo: PoolInfoType
15
- handleApprove: () => void
16
- }
17
-
18
- export function Evaluation({
19
- poolInfo,
20
- handleApprove,
21
- }: Props): React.ReactElement {
22
- const theme = useTheme()
23
- const { checkingEA } = useEA()
24
- const dispatch = useAppDispatch()
25
- const { account, chainId } = useWeb3React()
26
- const [status, setStatus] = useState<'checking' | 'success'>('checking')
27
-
28
- useEffect(() => {
29
- const fetchData = async () => {
30
- if (account && chainId) {
31
- await checkingEA(
32
- {
33
- poolAddress: poolInfo.pool,
34
- borrowerWalletAddress: account,
35
- },
36
- WIDGET_STEP.Evaluation,
37
- )
38
- handleApprove()
39
- setStatus('success')
40
- }
41
- }
42
- fetchData()
43
- }, [
44
- account,
45
- chainId,
46
- checkingEA,
47
- handleApprove,
48
- poolInfo.assetAddress,
49
- poolInfo.pool,
50
- ])
51
-
52
- const styles = {
53
- wrapper: css`
54
- height: 518px;
55
- position: relative;
56
- `,
57
- header: css`
58
- ${theme.cssMixins.rowHCentered};
59
- margin-top: -5px;
60
- `,
61
- content: css`
62
- ${theme.cssMixins.rowHCentered};
63
- margin-top: 30px;
64
- font-family: 'Uni-Neue-Regular';
65
- font-size: 16px;
66
- line-height: 24px;
67
- color: #49505b;
68
- margin-bottom: 65px;
69
- `,
70
- checkWrapper: css`
71
- ${theme.cssMixins.rowVCentered}
72
- width: 100%;
73
- height: 72px;
74
- background: #f9f8fa;
75
- border-radius: 4px;
76
- font-family: 'Uni-Neue-Regular';
77
- font-size: 16px;
78
- color: #49505b;
79
- `,
80
- checkIcon: css`
81
- ${theme.cssMixins.rowCentered}
82
- width: 105px;
83
- height: 100%;
84
-
85
- & > img {
86
- max-width: 100%;
87
- max-height: 100%;
88
- }
89
- `,
90
- congratsWrapper: css`
91
- font-family: 'Uni-Neue-Regular';
92
- font-size: 16px;
93
- padding: 0 16px;
94
- ${theme.cssMixins.rowVCentered}
95
- margin-top: 60px;
96
- height: 52px;
97
- background: linear-gradient(
98
- 0deg,
99
- rgba(255, 255, 255, 0.9),
100
- rgba(255, 255, 255, 0.9)
101
- ),
102
- #2e7d32;
103
- border-radius: 4px;
104
- `,
105
- bottom: css`
106
- & .MuiButtonBase-root {
107
- width: 100%;
108
- position: absolute;
109
- bottom: 0;
110
- }
111
- `,
112
- }
113
-
114
- const goToNextStep = () => {
115
- dispatch(setStep(WIDGET_STEP.ChooseAmount))
116
- }
117
-
118
- return (
119
- <Box css={styles.wrapper}>
120
- <Typography variant='h6' css={styles.header}>
121
- Borrow
122
- </Typography>
123
- <Box css={styles.content}>
124
- Looks like it’s your first time around here. Let’s see if you qualify...
125
- </Box>
126
- <Box css={styles.checkWrapper} sx={{ marginBottom: '16px' }}>
127
- <Box css={styles.checkIcon}>
128
- {status === 'checking' && <img src={spinner} alt='loading...' />}
129
- {status === 'success' && <CheckGreenIcon />}
130
- </Box>
131
- <Box>Checking your income</Box>
132
- </Box>
133
- <Box css={styles.checkWrapper}>
134
- <Box css={styles.checkIcon}>
135
- {status === 'checking' && <img src={spinner} alt='loading...' />}
136
- {status === 'success' && <CheckGreenIcon />}
137
- </Box>
138
- <Box>Checking other qualifications</Box>
139
- </Box>
140
- {status === 'success' && (
141
- <>
142
- <Box css={styles.congratsWrapper}>
143
- <CheckCircleIcon />
144
- <Box sx={{ marginLeft: '16px' }}>
145
- Congrats, you are qualified to borrow
146
- </Box>
147
- </Box>
148
- <Box css={styles.bottom}>
149
- <Button variant='contained' onClick={goToNextStep}>
150
- CONTINUE TO BORROW
151
- </Button>
152
- </Box>
153
- </>
154
- )}
155
- </Box>
156
- )
157
- }
1
+ import { Box, Button, css, Typography, useTheme } from '@mui/material'
2
+ import { useWeb3React } from '@web3-react/core'
3
+ import { PoolInfoType } from '@huma-finance/shared'
4
+ import React, { useEffect, useState } from 'react'
5
+
6
+ import useEA from '../../../hooks/useEA'
7
+ import { useAppDispatch } from '../../../hooks/useRedux'
8
+ import { setStep } from '../../../store/widgets.reducers'
9
+ import { WIDGET_STEP } from '../../../store/widgets.store'
10
+ import { CheckCircleIcon, CheckGreenIcon } from '../../icons'
11
+ import spinner from '../../icons/spinner.gif'
12
+
13
+ type Props = {
14
+ poolInfo: PoolInfoType
15
+ handleApprove: () => void
16
+ }
17
+
18
+ export function Evaluation({
19
+ poolInfo,
20
+ handleApprove,
21
+ }: Props): React.ReactElement {
22
+ const theme = useTheme()
23
+ const { checkingEA } = useEA()
24
+ const dispatch = useAppDispatch()
25
+ const { account, chainId } = useWeb3React()
26
+ const [status, setStatus] = useState<'checking' | 'success'>('checking')
27
+
28
+ useEffect(() => {
29
+ const fetchData = async () => {
30
+ if (account && chainId) {
31
+ await checkingEA(
32
+ {
33
+ poolAddress: poolInfo.pool,
34
+ borrowerWalletAddress: account,
35
+ },
36
+ WIDGET_STEP.Evaluation,
37
+ )
38
+ handleApprove()
39
+ setStatus('success')
40
+ }
41
+ }
42
+ fetchData()
43
+ }, [
44
+ account,
45
+ chainId,
46
+ checkingEA,
47
+ handleApprove,
48
+ poolInfo.assetAddress,
49
+ poolInfo.pool,
50
+ ])
51
+
52
+ const styles = {
53
+ wrapper: css`
54
+ height: 518px;
55
+ position: relative;
56
+ `,
57
+ header: css`
58
+ ${theme.cssMixins.rowHCentered};
59
+ margin-top: -5px;
60
+ `,
61
+ content: css`
62
+ ${theme.cssMixins.rowHCentered};
63
+ margin-top: 30px;
64
+ font-family: 'Uni-Neue-Regular';
65
+ font-size: 16px;
66
+ line-height: 24px;
67
+ color: #49505b;
68
+ margin-bottom: 65px;
69
+ `,
70
+ checkWrapper: css`
71
+ ${theme.cssMixins.rowVCentered}
72
+ width: 100%;
73
+ height: 72px;
74
+ background: #f9f8fa;
75
+ border-radius: 4px;
76
+ font-family: 'Uni-Neue-Regular';
77
+ font-size: 16px;
78
+ color: #49505b;
79
+ `,
80
+ checkIcon: css`
81
+ ${theme.cssMixins.rowCentered}
82
+ width: 105px;
83
+ height: 100%;
84
+
85
+ & > img {
86
+ max-width: 100%;
87
+ max-height: 100%;
88
+ }
89
+ `,
90
+ congratsWrapper: css`
91
+ font-family: 'Uni-Neue-Regular';
92
+ font-size: 16px;
93
+ padding: 0 16px;
94
+ ${theme.cssMixins.rowVCentered}
95
+ margin-top: 60px;
96
+ height: 52px;
97
+ background: linear-gradient(
98
+ 0deg,
99
+ rgba(255, 255, 255, 0.9),
100
+ rgba(255, 255, 255, 0.9)
101
+ ),
102
+ #2e7d32;
103
+ border-radius: 4px;
104
+ `,
105
+ bottom: css`
106
+ & .MuiButtonBase-root {
107
+ width: 100%;
108
+ position: absolute;
109
+ bottom: 0;
110
+ }
111
+ `,
112
+ }
113
+
114
+ const goToNextStep = () => {
115
+ dispatch(setStep(WIDGET_STEP.ChooseAmount))
116
+ }
117
+
118
+ return (
119
+ <Box css={styles.wrapper}>
120
+ <Typography variant='h6' css={styles.header}>
121
+ Borrow
122
+ </Typography>
123
+ <Box css={styles.content}>
124
+ Looks like it’s your first time around here. Let’s see if you qualify...
125
+ </Box>
126
+ <Box css={styles.checkWrapper} sx={{ marginBottom: '16px' }}>
127
+ <Box css={styles.checkIcon}>
128
+ {status === 'checking' && <img src={spinner} alt='loading...' />}
129
+ {status === 'success' && <CheckGreenIcon />}
130
+ </Box>
131
+ <Box>Checking your income</Box>
132
+ </Box>
133
+ <Box css={styles.checkWrapper}>
134
+ <Box css={styles.checkIcon}>
135
+ {status === 'checking' && <img src={spinner} alt='loading...' />}
136
+ {status === 'success' && <CheckGreenIcon />}
137
+ </Box>
138
+ <Box>Checking other qualifications</Box>
139
+ </Box>
140
+ {status === 'success' && (
141
+ <>
142
+ <Box css={styles.congratsWrapper}>
143
+ <CheckCircleIcon />
144
+ <Box sx={{ marginLeft: '16px' }}>
145
+ Congrats, you are qualified to borrow
146
+ </Box>
147
+ </Box>
148
+ <Box css={styles.bottom}>
149
+ <Button variant='contained' onClick={goToNextStep}>
150
+ CONTINUE TO BORROW
151
+ </Button>
152
+ </Box>
153
+ </>
154
+ )}
155
+ </Box>
156
+ )
157
+ }
@@ -1,68 +1,68 @@
1
- import {
2
- AccountStats,
3
- PoolInfoType,
4
- upScale,
5
- useCLFeeManager,
6
- } from '@huma-finance/shared'
7
- import React, { useCallback, useState } from 'react'
8
-
9
- import { useAppDispatch } from '../../../hooks/useRedux'
10
- import { setBorrowInfo } from '../../../store/widgets.reducers'
11
- import { WIDGET_STEP } from '../../../store/widgets.store'
12
- import { ChooseAmountModal } from '../../ChooseAmountModal'
13
-
14
- type Props = {
15
- poolInfo: PoolInfoType
16
- accountStats: AccountStats
17
- }
18
-
19
- export function ChooseAmount({
20
- poolInfo,
21
- accountStats,
22
- }: Props): React.ReactElement | null {
23
- const dispatch = useAppDispatch()
24
- const { poolUnderlyingToken } = poolInfo
25
- const { symbol, decimals } = poolUnderlyingToken
26
- const { getFeesCharged } = useCLFeeManager(poolInfo.poolName)
27
- const [chargedFees, setChargedFees] = useState(0)
28
- const [currentAmount, setCurrentAmount] = useState(0)
29
- const { creditRecordStatic, creditAvailableAmount } = accountStats
30
-
31
- const handleChangeAmount = useCallback(
32
- (newAmount: number) => {
33
- setCurrentAmount(newAmount)
34
- const newChargedFees = getFeesCharged(newAmount)
35
- setChargedFees(newChargedFees)
36
- },
37
- [getFeesCharged],
38
- )
39
-
40
- const handleAction = useCallback(() => {
41
- const nextStep = WIDGET_STEP.Transfer
42
- dispatch(
43
- setBorrowInfo({
44
- borrowAmount: currentAmount,
45
- borrowAmountBN: upScale(currentAmount, decimals),
46
- chargedFees,
47
- nextStep,
48
- }),
49
- )
50
- }, [chargedFees, currentAmount, decimals, dispatch])
51
-
52
- return (
53
- <ChooseAmountModal
54
- title='Borrow'
55
- description1='Choose Amount'
56
- sliderMax={creditAvailableAmount}
57
- currentAmount={currentAmount}
58
- tokenSymbol={symbol}
59
- topLeft='Origination Fee'
60
- topRight={`${chargedFees} ${symbol}`}
61
- downLeft='APR'
62
- downRight={`${creditRecordStatic!.aprInBps / 100}%`}
63
- handleChangeAmount={handleChangeAmount}
64
- handleAction={handleAction}
65
- actionText='borrow'
66
- />
67
- )
68
- }
1
+ import {
2
+ AccountStats,
3
+ PoolInfoType,
4
+ upScale,
5
+ useCLFeeManager,
6
+ } from '@huma-finance/shared'
7
+ import React, { useCallback, useState } from 'react'
8
+
9
+ import { useAppDispatch } from '../../../hooks/useRedux'
10
+ import { setBorrowInfo } from '../../../store/widgets.reducers'
11
+ import { WIDGET_STEP } from '../../../store/widgets.store'
12
+ import { ChooseAmountModal } from '../../ChooseAmountModal'
13
+
14
+ type Props = {
15
+ poolInfo: PoolInfoType
16
+ accountStats: AccountStats
17
+ }
18
+
19
+ export function ChooseAmount({
20
+ poolInfo,
21
+ accountStats,
22
+ }: Props): React.ReactElement | null {
23
+ const dispatch = useAppDispatch()
24
+ const { poolUnderlyingToken } = poolInfo
25
+ const { symbol, decimals } = poolUnderlyingToken
26
+ const { getFeesCharged } = useCLFeeManager(poolInfo.poolName)
27
+ const [chargedFees, setChargedFees] = useState(0)
28
+ const [currentAmount, setCurrentAmount] = useState(0)
29
+ const { creditRecordStatic, creditAvailableAmount } = accountStats
30
+
31
+ const handleChangeAmount = useCallback(
32
+ (newAmount: number) => {
33
+ setCurrentAmount(newAmount)
34
+ const newChargedFees = getFeesCharged(newAmount)
35
+ setChargedFees(newChargedFees)
36
+ },
37
+ [getFeesCharged],
38
+ )
39
+
40
+ const handleAction = useCallback(() => {
41
+ const nextStep = WIDGET_STEP.Transfer
42
+ dispatch(
43
+ setBorrowInfo({
44
+ borrowAmount: currentAmount,
45
+ borrowAmountBN: upScale(currentAmount, decimals),
46
+ chargedFees,
47
+ nextStep,
48
+ }),
49
+ )
50
+ }, [chargedFees, currentAmount, decimals, dispatch])
51
+
52
+ return (
53
+ <ChooseAmountModal
54
+ title='Borrow'
55
+ description1='Choose Amount'
56
+ sliderMax={creditAvailableAmount}
57
+ currentAmount={currentAmount}
58
+ tokenSymbol={symbol}
59
+ topLeft='Origination Fee'
60
+ topRight={`${chargedFees} ${symbol}`}
61
+ downLeft='APR'
62
+ downRight={`${creditRecordStatic!.aprInBps / 100}%`}
63
+ handleChangeAmount={handleChangeAmount}
64
+ handleAction={handleAction}
65
+ actionText='borrow'
66
+ />
67
+ )
68
+ }
@@ -1,44 +1,44 @@
1
- import {
2
- PoolInfoType,
3
- toBigNumber,
4
- txAtom,
5
- useCLPoolAllowance,
6
- } from '@huma-finance/shared'
7
- import React, { useCallback } from 'react'
8
-
9
- import { useResetAtom } from 'jotai/utils'
10
- import { useWeb3React } from '@web3-react/core'
11
- import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
12
- import { setStep } from '../../../store/widgets.reducers'
13
- import { selectWidgetState } from '../../../store/widgets.selectors'
14
- import { WIDGET_STEP } from '../../../store/widgets.store'
15
- import { TxSendModal } from '../../TxSendModal'
16
-
17
- type Props = {
18
- poolInfo: PoolInfoType
19
- }
20
-
21
- export function Transfer({ poolInfo }: Props): React.ReactElement {
22
- const dispatch = useAppDispatch()
23
- const reset = useResetAtom(txAtom)
24
- const { account } = useWeb3React()
25
- const { borrowAmountBN } = useAppSelector(selectWidgetState)
26
- const { allowance } = useCLPoolAllowance(poolInfo.poolName, account)
27
-
28
- const handleSuccess = useCallback(() => {
29
- reset()
30
- const nextStep = allowance.gte(toBigNumber(borrowAmountBN!))
31
- ? WIDGET_STEP.Done
32
- : WIDGET_STEP.ApproveAllowance
33
- dispatch(setStep(nextStep))
34
- }, [allowance, borrowAmountBN, dispatch, reset])
35
-
36
- return (
37
- <TxSendModal
38
- poolInfo={poolInfo}
39
- method='drawdown'
40
- params={[borrowAmountBN]}
41
- handleSuccess={handleSuccess}
42
- />
43
- )
44
- }
1
+ import {
2
+ PoolInfoType,
3
+ toBigNumber,
4
+ txAtom,
5
+ useCLPoolAllowance,
6
+ } from '@huma-finance/shared'
7
+ import React, { useCallback } from 'react'
8
+
9
+ import { useResetAtom } from 'jotai/utils'
10
+ import { useWeb3React } from '@web3-react/core'
11
+ import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
12
+ import { setStep } from '../../../store/widgets.reducers'
13
+ import { selectWidgetState } from '../../../store/widgets.selectors'
14
+ import { WIDGET_STEP } from '../../../store/widgets.store'
15
+ import { TxSendModal } from '../../TxSendModal'
16
+
17
+ type Props = {
18
+ poolInfo: PoolInfoType
19
+ }
20
+
21
+ export function Transfer({ poolInfo }: Props): React.ReactElement {
22
+ const dispatch = useAppDispatch()
23
+ const reset = useResetAtom(txAtom)
24
+ const { account } = useWeb3React()
25
+ const { borrowAmountBN } = useAppSelector(selectWidgetState)
26
+ const { allowance } = useCLPoolAllowance(poolInfo.poolName, account)
27
+
28
+ const handleSuccess = useCallback(() => {
29
+ reset()
30
+ const nextStep = allowance.gte(toBigNumber(borrowAmountBN!))
31
+ ? WIDGET_STEP.Done
32
+ : WIDGET_STEP.ApproveAllowance
33
+ dispatch(setStep(nextStep))
34
+ }, [allowance, borrowAmountBN, dispatch, reset])
35
+
36
+ return (
37
+ <TxSendModal
38
+ poolInfo={poolInfo}
39
+ method='drawdown'
40
+ params={[borrowAmountBN]}
41
+ handleSuccess={handleSuccess}
42
+ />
43
+ )
44
+ }
@@ -1,29 +1,29 @@
1
- import { PoolInfoType } from '@huma-finance/shared'
2
- import React, { useCallback } from 'react'
3
-
4
- import { useAppDispatch } from '../../../hooks/useRedux'
5
- import { setStep } from '../../../store/widgets.reducers'
6
- import { WIDGET_STEP } from '../../../store/widgets.store'
7
- import { ApproveAllowanceModal } from '../../ApproveAllowanceModal'
8
-
9
- type Props = {
10
- poolInfo: PoolInfoType
11
- }
12
-
13
- export function ApproveAllowance({
14
- poolInfo,
15
- }: Props): React.ReactElement | null {
16
- const dispatch = useAppDispatch()
17
-
18
- const handleSuccess = useCallback(() => {
19
- dispatch(setStep(WIDGET_STEP.Done))
20
- }, [dispatch])
21
-
22
- return (
23
- <ApproveAllowanceModal
24
- poolInfo={poolInfo}
25
- handleSuccess={handleSuccess}
26
- showAutoPayback
27
- />
28
- )
29
- }
1
+ import { PoolInfoType } from '@huma-finance/shared'
2
+ import React, { useCallback } from 'react'
3
+
4
+ import { useAppDispatch } from '../../../hooks/useRedux'
5
+ import { setStep } from '../../../store/widgets.reducers'
6
+ import { WIDGET_STEP } from '../../../store/widgets.store'
7
+ import { ApproveAllowanceModal } from '../../ApproveAllowanceModal'
8
+
9
+ type Props = {
10
+ poolInfo: PoolInfoType
11
+ }
12
+
13
+ export function ApproveAllowance({
14
+ poolInfo,
15
+ }: Props): React.ReactElement | null {
16
+ const dispatch = useAppDispatch()
17
+
18
+ const handleSuccess = useCallback(() => {
19
+ dispatch(setStep(WIDGET_STEP.Done))
20
+ }, [dispatch])
21
+
22
+ return (
23
+ <ApproveAllowanceModal
24
+ poolInfo={poolInfo}
25
+ handleSuccess={handleSuccess}
26
+ showAutoPayback
27
+ />
28
+ )
29
+ }
@@ -1,30 +1,30 @@
1
- import { CreditRecordType, PoolInfoType, timeUtil } from '@huma-finance/shared'
2
- import React from 'react'
3
-
4
- import { useAppSelector } from '../../../hooks/useRedux'
5
- import { selectWidgetState } from '../../../store/widgets.selectors'
6
- import { TxDoneModal } from '../../TxDoneModal'
7
-
8
- type Props = {
9
- poolInfo: PoolInfoType
10
- creditRecord: CreditRecordType
11
- handleAction: () => void
12
- }
13
-
14
- export function Success({
15
- poolInfo,
16
- creditRecord,
17
- handleAction,
18
- }: Props): React.ReactElement {
19
- const { borrowAmountNet } = useAppSelector(selectWidgetState)
20
- const { poolUnderlyingToken } = poolInfo
21
- const { symbol } = poolUnderlyingToken
22
- const dueDate = timeUtil.timestampToLL(creditRecord?.dueDate.toNumber())
23
-
24
- const content = [
25
- `${borrowAmountNet} ${symbol} is now in your wallet.`,
26
- `Note: your payment will be automatically deducted on ${dueDate}.`,
27
- ]
28
-
29
- return <TxDoneModal handleAction={handleAction} content={content} />
30
- }
1
+ import { CreditRecordType, PoolInfoType, timeUtil } from '@huma-finance/shared'
2
+ import React from 'react'
3
+
4
+ import { useAppSelector } from '../../../hooks/useRedux'
5
+ import { selectWidgetState } from '../../../store/widgets.selectors'
6
+ import { TxDoneModal } from '../../TxDoneModal'
7
+
8
+ type Props = {
9
+ poolInfo: PoolInfoType
10
+ creditRecord: CreditRecordType
11
+ handleAction: () => void
12
+ }
13
+
14
+ export function Success({
15
+ poolInfo,
16
+ creditRecord,
17
+ handleAction,
18
+ }: Props): React.ReactElement {
19
+ const { borrowAmountNet } = useAppSelector(selectWidgetState)
20
+ const { poolUnderlyingToken } = poolInfo
21
+ const { symbol } = poolUnderlyingToken
22
+ const dueDate = timeUtil.timestampToLL(creditRecord?.dueDate.toNumber())
23
+
24
+ const content = [
25
+ `${borrowAmountNet} ${symbol} is now in your wallet.`,
26
+ `Note: your payment will be automatically deducted on ${dueDate}.`,
27
+ ]
28
+
29
+ return <TxDoneModal handleAction={handleAction} content={content} />
30
+ }