@huma-finance/widgets 0.0.21 → 0.0.24

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 +119 -119
  19. package/dist/cjs/index.cjs.map +1 -1
  20. package/dist/index.d.ts +193 -193
  21. package/dist/index.js +119 -119
  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 -123
  30. package/src/components/ApolloWrapper.tsx +15 -15
  31. package/src/components/ApproveAllowanceModal.tsx +121 -121
  32. package/src/components/BottomButton.tsx +31 -31
  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 +86 -86
  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 +300 -300
  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 +9 -9
  163. package/tsconfig.build.json +7 -7
  164. package/tsconfig.json +32 -32
  165. package/webpack.cosmos.js +54 -54
@@ -1,49 +1,49 @@
1
- import { Box, css, useTheme } from '@mui/material'
2
- import React from 'react'
3
- import { HumaLoading } from './HumaLoading'
4
-
5
- import { WrapperModal } from './WrapperModal'
6
-
7
- type Props = {
8
- title: string
9
- description?: string
10
- hideLoader?: boolean
11
- children?: React.ReactNode
12
- }
13
-
14
- export function LoadingModal({
15
- title,
16
- description,
17
- hideLoader = false,
18
- children,
19
- }: Props): React.ReactElement {
20
- const theme = useTheme()
21
-
22
- const styles = {
23
- loader: css`
24
- width: 100%;
25
- ${theme.cssMixins.rowHCentered};
26
- position: absolute;
27
- top: 50%;
28
- transform: translateY(-50%);
29
- `,
30
- bottom: css`
31
- & .MuiButtonBase-root {
32
- width: 100%;
33
- position: absolute;
34
- bottom: 0;
35
- }
36
- `,
37
- }
38
-
39
- return (
40
- <WrapperModal title={title} subTitle={description}>
41
- {!hideLoader && (
42
- <Box css={styles.loader}>
43
- <HumaLoading />
44
- </Box>
45
- )}
46
- <Box css={styles.bottom}>{children}</Box>
47
- </WrapperModal>
48
- )
49
- }
1
+ import { Box, css, useTheme } from '@mui/material'
2
+ import React from 'react'
3
+ import { HumaLoading } from './HumaLoading'
4
+
5
+ import { WrapperModal } from './WrapperModal'
6
+
7
+ type Props = {
8
+ title: string
9
+ description?: string
10
+ hideLoader?: boolean
11
+ children?: React.ReactNode
12
+ }
13
+
14
+ export function LoadingModal({
15
+ title,
16
+ description,
17
+ hideLoader = false,
18
+ children,
19
+ }: Props): React.ReactElement {
20
+ const theme = useTheme()
21
+
22
+ const styles = {
23
+ loader: css`
24
+ width: 100%;
25
+ ${theme.cssMixins.rowHCentered};
26
+ position: absolute;
27
+ top: 50%;
28
+ transform: translateY(-50%);
29
+ `,
30
+ bottom: css`
31
+ & .MuiButtonBase-root {
32
+ width: 100%;
33
+ position: absolute;
34
+ bottom: 0;
35
+ }
36
+ `,
37
+ }
38
+
39
+ return (
40
+ <WrapperModal title={title} subTitle={description}>
41
+ {!hideLoader && (
42
+ <Box css={styles.loader}>
43
+ <HumaLoading />
44
+ </Box>
45
+ )}
46
+ <Box css={styles.bottom}>{children}</Box>
47
+ </WrapperModal>
48
+ )
49
+ }
@@ -1,55 +1,55 @@
1
- import { useWeb3React } from '@web3-react/core'
2
- import { PoolInfoType } from '@huma-finance/shared'
3
- import React, { useEffect } from 'react'
4
-
5
- import useEA from '../../../hooks/useEA'
6
- import { LoadingModal } from '../../LoadingModal'
7
- import { WIDGET_STEP } from '../../../store/widgets.store'
8
-
9
- type Props = {
10
- poolInfo: PoolInfoType
11
- payerAddress: string
12
- superToken: string
13
- }
14
-
15
- export function Evaluation({
16
- poolInfo,
17
- payerAddress,
18
- superToken,
19
- }: Props): React.ReactElement {
20
- const { account } = useWeb3React()
21
- const { checkingEA } = useEA()
22
-
23
- useEffect(() => {
24
- if (account) {
25
- checkingEA(
26
- {
27
- poolAddress: poolInfo.pool,
28
- borrowerWalletAddress: account,
29
- context: {
30
- receivable: {
31
- address: poolInfo.assetAddress!,
32
- },
33
- payerWalletAddress: payerAddress,
34
- superToken,
35
- },
36
- },
37
- WIDGET_STEP.ChooseAmount,
38
- )
39
- }
40
- }, [
41
- account,
42
- checkingEA,
43
- payerAddress,
44
- poolInfo.assetAddress,
45
- poolInfo.pool,
46
- superToken,
47
- ])
48
-
49
- return (
50
- <LoadingModal
51
- title='Checking Stream'
52
- description='Checking if the stream qualifies for factoring...'
53
- />
54
- )
55
- }
1
+ import { useWeb3React } from '@web3-react/core'
2
+ import { PoolInfoType } from '@huma-finance/shared'
3
+ import React, { useEffect } from 'react'
4
+
5
+ import useEA from '../../../hooks/useEA'
6
+ import { LoadingModal } from '../../LoadingModal'
7
+ import { WIDGET_STEP } from '../../../store/widgets.store'
8
+
9
+ type Props = {
10
+ poolInfo: PoolInfoType
11
+ payerAddress: string
12
+ superToken: string
13
+ }
14
+
15
+ export function Evaluation({
16
+ poolInfo,
17
+ payerAddress,
18
+ superToken,
19
+ }: Props): React.ReactElement {
20
+ const { account } = useWeb3React()
21
+ const { checkingEA } = useEA()
22
+
23
+ useEffect(() => {
24
+ if (account) {
25
+ checkingEA(
26
+ {
27
+ poolAddress: poolInfo.pool,
28
+ borrowerWalletAddress: account,
29
+ context: {
30
+ receivable: {
31
+ address: poolInfo.assetAddress!,
32
+ },
33
+ payerWalletAddress: payerAddress,
34
+ superToken,
35
+ },
36
+ },
37
+ WIDGET_STEP.ChooseAmount,
38
+ )
39
+ }
40
+ }, [
41
+ account,
42
+ checkingEA,
43
+ payerAddress,
44
+ poolInfo.assetAddress,
45
+ poolInfo.pool,
46
+ superToken,
47
+ ])
48
+
49
+ return (
50
+ <LoadingModal
51
+ title='Checking Stream'
52
+ description='Checking if the stream qualifies for factoring...'
53
+ />
54
+ )
55
+ }
@@ -1,127 +1,127 @@
1
- import {
2
- downScale,
3
- PoolInfoType,
4
- toBigNumber,
5
- upScale,
6
- useFeeManager,
7
- } from '@huma-finance/shared'
8
- import React, { useCallback, useState } from 'react'
9
-
10
- import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
11
- import { setBorrowInfo, setStream } from '../../../store/widgets.reducers'
12
- import { selectWidgetState } from '../../../store/widgets.selectors'
13
- import { WIDGET_STEP } from '../../../store/widgets.store'
14
- import { ChooseAmountModal } from '../../ChooseAmountModal'
15
-
16
- type Props = {
17
- poolInfo: PoolInfoType
18
- currentFlowRate: string
19
- }
20
-
21
- export function ChooseAmount({
22
- poolInfo,
23
- currentFlowRate,
24
- }: Props): React.ReactElement | null {
25
- const dispatch = useAppDispatch()
26
- const { approval } = useAppSelector(selectWidgetState)
27
- const { getFeesCharged } = useFeeManager(poolInfo.poolName, poolInfo.poolType)
28
- const [chargedFees, setChargedFees] = useState(0)
29
- const [currentAmount, setCurrentAmount] = useState(0)
30
- const borrowPeriodInSeconds = approval!.terms.intervalInDays * 24 * 60 * 60
31
-
32
- const getBorrowFlowrateAndAmount = useCallback(
33
- (borrowAmount: number) => {
34
- const currentFlowRateBN = toBigNumber(currentFlowRate)
35
- const borrowAmountBN = toBigNumber(
36
- upScale(borrowAmount, approval!.token.decimal),
37
- )
38
-
39
- const totalAmountInBorrowPeriod = currentFlowRateBN.mul(
40
- borrowPeriodInSeconds,
41
- )
42
- let borrowFlowrate = borrowAmountBN
43
- .mul(currentFlowRateBN)
44
- .div(totalAmountInBorrowPeriod)
45
- // To ensure enough flowRate due to round down when convert to string
46
- .add(1)
47
-
48
- // Can not borrow all the available flowrate
49
- if (borrowFlowrate.gte(currentFlowRateBN)) {
50
- borrowFlowrate = currentFlowRateBN.sub(1)
51
- }
52
- if (borrowAmountBN.gte(approval!.terms.creditLimit)) {
53
- borrowFlowrate = borrowFlowrate.sub(1)
54
- }
55
-
56
- // As borrowFlowrate adds 1, need to calculate the new accurate borrow amount
57
- const newBorrowAmountBN = borrowFlowrate
58
- .mul(totalAmountInBorrowPeriod)
59
- .div(currentFlowRateBN)
60
- const newBorrowAmount = downScale(
61
- newBorrowAmountBN,
62
- approval!.token.decimal,
63
- )
64
-
65
- return {
66
- borrowFlowrate: borrowFlowrate.toString(),
67
- borrowAmount: Number(newBorrowAmount),
68
- borrowAmountBN: newBorrowAmountBN.toString(),
69
- }
70
- },
71
- [approval, borrowPeriodInSeconds, currentFlowRate],
72
- )
73
-
74
- const handleChangeAmount = useCallback(
75
- (newAmount: number) => {
76
- if (approval) {
77
- setCurrentAmount(newAmount)
78
- setChargedFees(getFeesCharged(newAmount))
79
- }
80
- },
81
- [approval, getFeesCharged],
82
- )
83
- const handleAction = useCallback(() => {
84
- const { borrowFlowrate, borrowAmount, borrowAmountBN } =
85
- getBorrowFlowrateAndAmount(currentAmount)
86
-
87
- dispatch(
88
- setStream({
89
- borrowFlowrate,
90
- durationInSeconds: borrowPeriodInSeconds,
91
- }),
92
- )
93
- dispatch(
94
- setBorrowInfo({
95
- borrowAmount,
96
- borrowAmountBN,
97
- chargedFees,
98
- nextStep: WIDGET_STEP.ConfirmTransfer,
99
- }),
100
- )
101
- }, [
102
- borrowPeriodInSeconds,
103
- chargedFees,
104
- currentAmount,
105
- dispatch,
106
- getBorrowFlowrateAndAmount,
107
- ])
108
-
109
- if (!approval) {
110
- return null
111
- }
112
-
113
- return (
114
- <ChooseAmountModal
115
- title='Choose Amount'
116
- description1='Access up to 100% of your stream flowrate'
117
- sliderMax={Number(approval.terms.creditLimitFormatted)}
118
- currentAmount={currentAmount}
119
- tokenSymbol={approval.token.symbol}
120
- topLeft='Fees'
121
- topRight={`${chargedFees} ${approval.token.symbol}`}
122
- handleChangeAmount={handleChangeAmount}
123
- handleAction={handleAction}
124
- actionText='Confirm Transfer'
125
- />
126
- )
127
- }
1
+ import {
2
+ downScale,
3
+ PoolInfoType,
4
+ toBigNumber,
5
+ upScale,
6
+ useFeeManager,
7
+ } from '@huma-finance/shared'
8
+ import React, { useCallback, useState } from 'react'
9
+
10
+ import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
11
+ import { setBorrowInfo, setStream } from '../../../store/widgets.reducers'
12
+ import { selectWidgetState } from '../../../store/widgets.selectors'
13
+ import { WIDGET_STEP } from '../../../store/widgets.store'
14
+ import { ChooseAmountModal } from '../../ChooseAmountModal'
15
+
16
+ type Props = {
17
+ poolInfo: PoolInfoType
18
+ currentFlowRate: string
19
+ }
20
+
21
+ export function ChooseAmount({
22
+ poolInfo,
23
+ currentFlowRate,
24
+ }: Props): React.ReactElement | null {
25
+ const dispatch = useAppDispatch()
26
+ const { approval } = useAppSelector(selectWidgetState)
27
+ const { getFeesCharged } = useFeeManager(poolInfo.poolName, poolInfo.poolType)
28
+ const [chargedFees, setChargedFees] = useState(0)
29
+ const [currentAmount, setCurrentAmount] = useState(0)
30
+ const borrowPeriodInSeconds = approval!.terms.intervalInDays * 24 * 60 * 60
31
+
32
+ const getBorrowFlowrateAndAmount = useCallback(
33
+ (borrowAmount: number) => {
34
+ const currentFlowRateBN = toBigNumber(currentFlowRate)
35
+ const borrowAmountBN = toBigNumber(
36
+ upScale(borrowAmount, approval!.token.decimal),
37
+ )
38
+
39
+ const totalAmountInBorrowPeriod = currentFlowRateBN.mul(
40
+ borrowPeriodInSeconds,
41
+ )
42
+ let borrowFlowrate = borrowAmountBN
43
+ .mul(currentFlowRateBN)
44
+ .div(totalAmountInBorrowPeriod)
45
+ // To ensure enough flowRate due to round down when convert to string
46
+ .add(1)
47
+
48
+ // Can not borrow all the available flowrate
49
+ if (borrowFlowrate.gte(currentFlowRateBN)) {
50
+ borrowFlowrate = currentFlowRateBN.sub(1)
51
+ }
52
+ if (borrowAmountBN.gte(approval!.terms.creditLimit)) {
53
+ borrowFlowrate = borrowFlowrate.sub(1)
54
+ }
55
+
56
+ // As borrowFlowrate adds 1, need to calculate the new accurate borrow amount
57
+ const newBorrowAmountBN = borrowFlowrate
58
+ .mul(totalAmountInBorrowPeriod)
59
+ .div(currentFlowRateBN)
60
+ const newBorrowAmount = downScale(
61
+ newBorrowAmountBN,
62
+ approval!.token.decimal,
63
+ )
64
+
65
+ return {
66
+ borrowFlowrate: borrowFlowrate.toString(),
67
+ borrowAmount: Number(newBorrowAmount),
68
+ borrowAmountBN: newBorrowAmountBN.toString(),
69
+ }
70
+ },
71
+ [approval, borrowPeriodInSeconds, currentFlowRate],
72
+ )
73
+
74
+ const handleChangeAmount = useCallback(
75
+ (newAmount: number) => {
76
+ if (approval) {
77
+ setCurrentAmount(newAmount)
78
+ setChargedFees(getFeesCharged(newAmount))
79
+ }
80
+ },
81
+ [approval, getFeesCharged],
82
+ )
83
+ const handleAction = useCallback(() => {
84
+ const { borrowFlowrate, borrowAmount, borrowAmountBN } =
85
+ getBorrowFlowrateAndAmount(currentAmount)
86
+
87
+ dispatch(
88
+ setStream({
89
+ borrowFlowrate,
90
+ durationInSeconds: borrowPeriodInSeconds,
91
+ }),
92
+ )
93
+ dispatch(
94
+ setBorrowInfo({
95
+ borrowAmount,
96
+ borrowAmountBN,
97
+ chargedFees,
98
+ nextStep: WIDGET_STEP.ConfirmTransfer,
99
+ }),
100
+ )
101
+ }, [
102
+ borrowPeriodInSeconds,
103
+ chargedFees,
104
+ currentAmount,
105
+ dispatch,
106
+ getBorrowFlowrateAndAmount,
107
+ ])
108
+
109
+ if (!approval) {
110
+ return null
111
+ }
112
+
113
+ return (
114
+ <ChooseAmountModal
115
+ title='Choose Amount'
116
+ description1='Access up to 100% of your stream flowrate'
117
+ sliderMax={Number(approval.terms.creditLimitFormatted)}
118
+ currentAmount={currentAmount}
119
+ tokenSymbol={approval.token.symbol}
120
+ topLeft='Fees'
121
+ topRight={`${chargedFees} ${approval.token.symbol}`}
122
+ handleChangeAmount={handleChangeAmount}
123
+ handleAction={handleAction}
124
+ actionText='Confirm Transfer'
125
+ />
126
+ )
127
+ }
@@ -1,42 +1,42 @@
1
- import { CHAINS, isEmpty } from '@huma-finance/shared'
2
- import { useWeb3React } from '@web3-react/core'
3
- import React, { useCallback } from 'react'
4
-
5
- import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
6
- import { setStep } from '../../../store/widgets.reducers'
7
- import { selectWidgetState } from '../../../store/widgets.selectors'
8
- import { WIDGET_STEP } from '../../../store/widgets.store'
9
- import { ConfirmTransferModal } from '../../ConfirmTransferModal'
10
-
11
- export function ConfirmTransfer(): React.ReactElement | null {
12
- const dispatch = useAppDispatch()
13
- const { chainId } = useWeb3React()
14
- const { borrowAmount, approval } = useAppSelector(selectWidgetState)
15
-
16
- const handleAction = useCallback(() => {
17
- const step = CHAINS[chainId!].isTestnet
18
- ? WIDGET_STEP.ApproveAllowance
19
- : WIDGET_STEP.Permit
20
- dispatch(setStep(step))
21
- }, [chainId, dispatch])
22
-
23
- if (isEmpty(borrowAmount) || isEmpty(approval)) {
24
- return null
25
- }
26
-
27
- return (
28
- <ConfirmTransferModal
29
- title='Confirm transaction details'
30
- description={`Huma keeps your Tradable Stream NFT as collateral until it's fully paid.`}
31
- items={[
32
- { leftText: 'Tradable Stream', rightText: 'Huma' },
33
- {
34
- leftText: `${borrowAmount!.toFixed(2)} ${approval?.token.symbol}`,
35
- rightText: 'You',
36
- },
37
- ]}
38
- actionText='Approve Transfer'
39
- handleAction={handleAction}
40
- />
41
- )
42
- }
1
+ import { CHAINS, isEmpty } from '@huma-finance/shared'
2
+ import { useWeb3React } from '@web3-react/core'
3
+ import React, { useCallback } from 'react'
4
+
5
+ import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
6
+ import { setStep } from '../../../store/widgets.reducers'
7
+ import { selectWidgetState } from '../../../store/widgets.selectors'
8
+ import { WIDGET_STEP } from '../../../store/widgets.store'
9
+ import { ConfirmTransferModal } from '../../ConfirmTransferModal'
10
+
11
+ export function ConfirmTransfer(): React.ReactElement | null {
12
+ const dispatch = useAppDispatch()
13
+ const { chainId } = useWeb3React()
14
+ const { borrowAmount, approval } = useAppSelector(selectWidgetState)
15
+
16
+ const handleAction = useCallback(() => {
17
+ const step = CHAINS[chainId!].isTestnet
18
+ ? WIDGET_STEP.ApproveAllowance
19
+ : WIDGET_STEP.Permit
20
+ dispatch(setStep(step))
21
+ }, [chainId, dispatch])
22
+
23
+ if (isEmpty(borrowAmount) || isEmpty(approval)) {
24
+ return null
25
+ }
26
+
27
+ return (
28
+ <ConfirmTransferModal
29
+ title='Confirm transaction details'
30
+ description={`Huma keeps your Tradable Stream NFT as collateral until it's fully paid.`}
31
+ items={[
32
+ { leftText: 'Tradable Stream', rightText: 'Huma' },
33
+ {
34
+ leftText: `${borrowAmount!.toFixed(2)} ${approval?.token.symbol}`,
35
+ rightText: 'You',
36
+ },
37
+ ]}
38
+ actionText='APPROVE TRANSFER'
39
+ handleAction={handleAction}
40
+ />
41
+ )
42
+ }
@@ -1,33 +1,33 @@
1
- import { PoolInfoType } from '@huma-finance/shared'
2
- import React, { useCallback } from 'react'
3
- import { useDispatch } from 'react-redux'
4
-
5
- import { useAppSelector } from '../../../hooks/useRedux'
6
- import { setStep } from '../../../store/widgets.reducers'
7
- import { selectWidgetState } from '../../../store/widgets.selectors'
8
- import { WIDGET_STEP } from '../../../store/widgets.store'
9
- import { ApproveAllowanceModal } from '../../ApproveAllowanceModal'
10
-
11
- type Props = {
12
- poolInfo: PoolInfoType
13
- }
14
-
15
- export function ApproveAllowance({
16
- poolInfo,
17
- }: Props): React.ReactElement | null {
18
- const dispatch = useDispatch()
19
- const { borrowAmountBN } = useAppSelector(selectWidgetState)
20
-
21
- const handleSuccess = useCallback(() => {
22
- dispatch(setStep(WIDGET_STEP.Permit))
23
- }, [dispatch])
24
-
25
- return (
26
- <ApproveAllowanceModal
27
- poolInfo={poolInfo}
28
- allowanceAmount={borrowAmountBN!}
29
- handleSuccess={handleSuccess}
30
- spender={poolInfo.poolProcessor!}
31
- />
32
- )
33
- }
1
+ import { PoolInfoType } from '@huma-finance/shared'
2
+ import React, { useCallback } from 'react'
3
+ import { useDispatch } from 'react-redux'
4
+
5
+ import { useAppSelector } from '../../../hooks/useRedux'
6
+ import { setStep } from '../../../store/widgets.reducers'
7
+ import { selectWidgetState } from '../../../store/widgets.selectors'
8
+ import { WIDGET_STEP } from '../../../store/widgets.store'
9
+ import { ApproveAllowanceModal } from '../../ApproveAllowanceModal'
10
+
11
+ type Props = {
12
+ poolInfo: PoolInfoType
13
+ }
14
+
15
+ export function ApproveAllowance({
16
+ poolInfo,
17
+ }: Props): React.ReactElement | null {
18
+ const dispatch = useDispatch()
19
+ const { borrowAmountBN } = useAppSelector(selectWidgetState)
20
+
21
+ const handleSuccess = useCallback(() => {
22
+ dispatch(setStep(WIDGET_STEP.Permit))
23
+ }, [dispatch])
24
+
25
+ return (
26
+ <ApproveAllowanceModal
27
+ poolInfo={poolInfo}
28
+ allowanceAmount={borrowAmountBN!}
29
+ handleSuccess={handleSuccess}
30
+ spender={poolInfo.poolProcessor!}
31
+ />
32
+ )
33
+ }