@huma-finance/widgets 0.0.8 → 0.0.11

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 (76) hide show
  1. package/dist/cjs/index.cjs +139 -131
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/index.js +139 -131
  4. package/dist/index.js.map +1 -1
  5. package/package.json +4 -4
  6. package/src/components/Activity.tsx +123 -123
  7. package/src/components/AllowListModal.tsx +113 -113
  8. package/src/components/ApproveAllowanceModal.tsx +118 -118
  9. package/src/components/ChooseAmountModal.tsx +315 -315
  10. package/src/components/CreditLine/borrow/1-Evaluation.tsx +158 -159
  11. package/src/components/CreditLine/borrow/2-AllowList.tsx +34 -34
  12. package/src/components/CreditLine/borrow/3-ChooseAmount.tsx +74 -74
  13. package/src/components/CreditLine/borrow/4-ApproveAllowance.tsx +29 -29
  14. package/src/components/CreditLine/borrow/5-Transfer.tsx +30 -30
  15. package/src/components/CreditLine/borrow/6-Success.tsx +30 -30
  16. package/src/components/CreditLine/borrow/index.tsx +119 -119
  17. package/src/components/CreditLine/payment/1-ChooseAmount.tsx +67 -67
  18. package/src/components/CreditLine/payment/2-ApproveAllowance.tsx +23 -23
  19. package/src/components/CreditLine/payment/3-Transfer.tsx +34 -34
  20. package/src/components/CreditLine/payment/4-Success.tsx +39 -39
  21. package/src/components/CreditLine/payment/index.tsx +94 -94
  22. package/src/components/ErrorModal.tsx +132 -132
  23. package/src/components/Factoring/FactoredList.tsx +143 -143
  24. package/src/components/Factoring/UpcomingList.tsx +90 -90
  25. package/src/components/InvoiceFactoring/borrow/1-Evaluation.tsx +52 -46
  26. package/src/components/InvoiceFactoring/borrow/2-AllowList.tsx +34 -34
  27. package/src/components/InvoiceFactoring/borrow/3-ChooseAmount.tsx +86 -92
  28. package/src/components/InvoiceFactoring/borrow/4-ConfirmTransfer.tsx +104 -104
  29. package/src/components/InvoiceFactoring/borrow/5-ApproveNFT.tsx +55 -55
  30. package/src/components/InvoiceFactoring/borrow/6-Transfer.tsx +34 -34
  31. package/src/components/InvoiceFactoring/borrow/7-Success.tsx +3 -3
  32. package/src/components/InvoiceFactoring/borrow/index.tsx +96 -96
  33. package/src/components/InvoiceFactoring/payment/1-ChooseAmount.tsx +67 -67
  34. package/src/components/InvoiceFactoring/payment/2-ApproveAllowance.tsx +23 -23
  35. package/src/components/InvoiceFactoring/payment/3-Transfer.tsx +34 -34
  36. package/src/components/InvoiceFactoring/payment/4-Success.tsx +23 -23
  37. package/src/components/InvoiceFactoring/payment/index.tsx +86 -86
  38. package/src/components/Lend/supply/1-Evaluation.tsx +86 -86
  39. package/src/components/Lend/supply/2-ChooseAmount.tsx +70 -70
  40. package/src/components/Lend/supply/3-ApproveAllowance.tsx +25 -25
  41. package/src/components/Lend/supply/4-ConfirmTransfer.tsx +104 -104
  42. package/src/components/Lend/supply/6-Transfer.tsx +32 -32
  43. package/src/components/Lend/supply/7-Success.tsx +49 -49
  44. package/src/components/Lend/supply/index.tsx +144 -144
  45. package/src/components/Lend/withdraw/1-CheckWithdrawble.tsx +73 -73
  46. package/src/components/Lend/withdraw/2-ChooseAmount.tsx +50 -50
  47. package/src/components/Lend/withdraw/3-Transfer.tsx +32 -32
  48. package/src/components/Lend/withdraw/4-Success.tsx +49 -49
  49. package/src/components/Lend/withdraw/index.tsx +101 -101
  50. package/src/components/StreamFactoring/borrow/1-Evaluation.tsx +47 -57
  51. package/src/components/StreamFactoring/borrow/2-ChooseAmount.tsx +124 -124
  52. package/src/components/StreamFactoring/borrow/3-ConfirmTransfer.tsx +104 -104
  53. package/src/components/StreamFactoring/borrow/4-ApproveAllowance.tsx +65 -65
  54. package/src/components/StreamFactoring/borrow/5-Permit.tsx +144 -144
  55. package/src/components/StreamFactoring/borrow/6-Transfer.tsx +37 -37
  56. package/src/components/StreamFactoring/borrow/7-Success.tsx +2 -2
  57. package/src/components/StreamFactoring/borrow/index.tsx +94 -95
  58. package/src/components/StreamFactoring/payment/ChooseAmount.tsx +54 -54
  59. package/src/components/StreamFactoring/payment/Success.tsx +23 -23
  60. package/src/components/StreamFactoring/payment/Transfer.tsx +34 -34
  61. package/src/components/StreamFactoring/payment/index.tsx +66 -66
  62. package/src/components/SuperfluidFactoring/SuperfluidFactoredList.tsx +61 -61
  63. package/src/components/SuperfluidFactoring/SuperfluidUpcomingList.tsx +185 -185
  64. package/src/components/SuperfluidFactoring/index.tsx +85 -85
  65. package/src/components/TxDoneModal.tsx +83 -83
  66. package/src/components/TxSendModal.tsx +59 -59
  67. package/src/components/ViewOnExplorer.tsx +26 -26
  68. package/src/components/WidgetWrapper.tsx +74 -74
  69. package/src/components/humaModal/HumaModal.tsx +68 -68
  70. package/src/cosmos/SDKTesting.fixture.tsx +557 -515
  71. package/src/hooks/useEA.ts +72 -70
  72. package/src/index.tsx +219 -219
  73. package/src/store/widgets.reducers.ts +120 -120
  74. package/src/store/widgets.store.ts +55 -55
  75. package/src/theme/components.ts +1 -1
  76. package/src/theme/hooks/useGetSizes.ts +0 -3
@@ -1,124 +1,124 @@
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 { approveInfo } = 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 = approveInfo!.intervalInDays * 24 * 60 * 60
31
-
32
- const getBorrowFlowrateAndAmount = useCallback(
33
- (borrowAmount: number) => {
34
- const currentFlowRateBN = toBigNumber(currentFlowRate)
35
- const borrowAmountBN = toBigNumber(
36
- upScale(borrowAmount, approveInfo!.tokenDecimal),
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
-
53
- // As borrowFlowrate adds 1, need to calculate the new accurate borrow amount
54
- const newBorrowAmountBN = borrowFlowrate
55
- .mul(totalAmountInBorrowPeriod)
56
- .div(currentFlowRateBN)
57
- const newBorrowAmount = downScale(
58
- newBorrowAmountBN,
59
- approveInfo!.tokenDecimal,
60
- )
61
-
62
- return {
63
- borrowFlowrate: borrowFlowrate.toString(),
64
- borrowAmount: Number(newBorrowAmount),
65
- borrowAmountBN: newBorrowAmountBN.toString(),
66
- }
67
- },
68
- [approveInfo, borrowPeriodInSeconds, currentFlowRate],
69
- )
70
-
71
- const handleChangeAmount = useCallback(
72
- (newAmount: number) => {
73
- if (approveInfo) {
74
- setCurrentAmount(newAmount)
75
- setChargedFees(getFeesCharged(newAmount))
76
- }
77
- },
78
- [approveInfo, getFeesCharged],
79
- )
80
- const handleAction = useCallback(() => {
81
- const { borrowFlowrate, borrowAmount, borrowAmountBN } =
82
- getBorrowFlowrateAndAmount(currentAmount)
83
-
84
- dispatch(
85
- setStream({
86
- borrowFlowrate,
87
- durationInSeconds: borrowPeriodInSeconds,
88
- }),
89
- )
90
- dispatch(
91
- setBorrowInfo({
92
- borrowAmount,
93
- borrowAmountBN,
94
- chargedFees,
95
- nextStep: WIDGET_STEP.ConfirmTransfer,
96
- }),
97
- )
98
- }, [
99
- borrowPeriodInSeconds,
100
- chargedFees,
101
- currentAmount,
102
- dispatch,
103
- getBorrowFlowrateAndAmount,
104
- ])
105
-
106
- if (!approveInfo) {
107
- return null
108
- }
109
-
110
- return (
111
- <ChooseAmountModal
112
- title='Choose Amount'
113
- description1='Access up to 100% of your stream flowrate'
114
- sliderMax={Number(approveInfo.creditLimit)}
115
- currentAmount={currentAmount}
116
- tokenSymbol={approveInfo.tokenSymbol}
117
- topLeft='Fees'
118
- topRight={`${chargedFees} ${approveInfo.tokenSymbol}`}
119
- handleChangeAmount={handleChangeAmount}
120
- handleAction={handleAction}
121
- actionText='Confirm Transfer'
122
- />
123
- )
124
- }
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
+
53
+ // As borrowFlowrate adds 1, need to calculate the new accurate borrow amount
54
+ const newBorrowAmountBN = borrowFlowrate
55
+ .mul(totalAmountInBorrowPeriod)
56
+ .div(currentFlowRateBN)
57
+ const newBorrowAmount = downScale(
58
+ newBorrowAmountBN,
59
+ approval!.token.decimal,
60
+ )
61
+
62
+ return {
63
+ borrowFlowrate: borrowFlowrate.toString(),
64
+ borrowAmount: Number(newBorrowAmount),
65
+ borrowAmountBN: newBorrowAmountBN.toString(),
66
+ }
67
+ },
68
+ [approval, borrowPeriodInSeconds, currentFlowRate],
69
+ )
70
+
71
+ const handleChangeAmount = useCallback(
72
+ (newAmount: number) => {
73
+ if (approval) {
74
+ setCurrentAmount(newAmount)
75
+ setChargedFees(getFeesCharged(newAmount))
76
+ }
77
+ },
78
+ [approval, getFeesCharged],
79
+ )
80
+ const handleAction = useCallback(() => {
81
+ const { borrowFlowrate, borrowAmount, borrowAmountBN } =
82
+ getBorrowFlowrateAndAmount(currentAmount)
83
+
84
+ dispatch(
85
+ setStream({
86
+ borrowFlowrate,
87
+ durationInSeconds: borrowPeriodInSeconds,
88
+ }),
89
+ )
90
+ dispatch(
91
+ setBorrowInfo({
92
+ borrowAmount,
93
+ borrowAmountBN,
94
+ chargedFees,
95
+ nextStep: WIDGET_STEP.ConfirmTransfer,
96
+ }),
97
+ )
98
+ }, [
99
+ borrowPeriodInSeconds,
100
+ chargedFees,
101
+ currentAmount,
102
+ dispatch,
103
+ getBorrowFlowrateAndAmount,
104
+ ])
105
+
106
+ if (!approval) {
107
+ return null
108
+ }
109
+
110
+ return (
111
+ <ChooseAmountModal
112
+ title='Choose Amount'
113
+ description1='Access up to 100% of your stream flowrate'
114
+ sliderMax={Number(approval.terms.creditLimit)}
115
+ currentAmount={currentAmount}
116
+ tokenSymbol={approval.token.symbol}
117
+ topLeft='Fees'
118
+ topRight={`${chargedFees} ${approval.token.symbol}`}
119
+ handleChangeAmount={handleChangeAmount}
120
+ handleAction={handleAction}
121
+ actionText='Confirm Transfer'
122
+ />
123
+ )
124
+ }
@@ -1,104 +1,104 @@
1
- import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'
2
- import { Box, Button, css, Typography, useTheme } from '@mui/material'
3
- import { useWeb3React } from '@web3-react/core'
4
- import { CHAINS, isEmpty } from '@huma-finance/shared'
5
- import React from 'react'
6
-
7
- import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
8
- import { setStep } from '../../../store/widgets.reducers'
9
- import { selectWidgetState } from '../../../store/widgets.selectors'
10
- import { WIDGET_STEP } from '../../../store/widgets.store'
11
-
12
- export function ConfirmTransfer(): React.ReactElement | null {
13
- const theme = useTheme()
14
- const dispatch = useAppDispatch()
15
- const { chainId } = useWeb3React()
16
- const { borrowAmount, approveInfo } = useAppSelector(selectWidgetState)
17
-
18
- const styles = {
19
- wrapper: css`
20
- height: 518px;
21
- position: relative;
22
- ${theme.cssMixins.colStretch};
23
- `,
24
- header: css`
25
- ${theme.cssMixins.rowHCentered};
26
- margin-top: -5px;
27
- `,
28
- description: css`
29
- font-weight: 500;
30
- font-size: 16px;
31
- color: #49505b;
32
- margin-top: 30px;
33
- `,
34
- transferWrapper: css`
35
- margin-top: 75px;
36
- `,
37
- transfer: css`
38
- ${theme.cssMixins.rowSpaceBetweened}
39
- ${theme.cssMixins.rowVCentered}
40
- height: 72px;
41
- background: #f9f8fa;
42
- border-radius: 4px;
43
- font-weight: 500;
44
- font-size: 16px;
45
- color: #49505b;
46
- padding: 24px 32px;
47
- margin-bottom: 9px;
48
- position: relative;
49
- `,
50
- arrow: css`
51
- color: #d2d0d6;
52
- position: absolute;
53
- margin: auto;
54
- top: 0;
55
- left: 0;
56
- bottom: 0;
57
- right: 0;
58
- `,
59
- okButton: css`
60
- width: 100%;
61
- position: absolute;
62
- bottom: 0;
63
- `,
64
- }
65
-
66
- const handleAction = () => {
67
- const step = CHAINS[chainId!].isTestnet
68
- ? WIDGET_STEP.ApproveAllowance
69
- : WIDGET_STEP.Permit
70
- dispatch(setStep(step))
71
- }
72
-
73
- if (isEmpty(borrowAmount) || isEmpty(approveInfo)) {
74
- return null
75
- }
76
-
77
- return (
78
- <Box css={styles.wrapper}>
79
- <Typography variant='h6' css={styles.header}>
80
- Confirm transaction details
81
- </Typography>
82
- <Box css={styles.description}>
83
- Huma keeps your Tradable Stream NFT as collateral until it's fully paid.
84
- </Box>
85
- <Box css={styles.transferWrapper}>
86
- <Box css={styles.transfer}>
87
- <Box>Tradable Stream</Box>
88
- <ArrowForwardIosIcon css={styles.arrow} />
89
- <Box>Huma</Box>
90
- </Box>
91
- <Box css={styles.transfer}>
92
- <Box>
93
- {borrowAmount!.toFixed(2)} {approveInfo?.tokenSymbol}
94
- </Box>
95
- <ArrowForwardIosIcon css={styles.arrow} />
96
- <Box>You</Box>
97
- </Box>
98
- </Box>
99
- <Button variant='contained' css={styles.okButton} onClick={handleAction}>
100
- Approve Transfer
101
- </Button>
102
- </Box>
103
- )
104
- }
1
+ import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'
2
+ import { Box, Button, css, Typography, useTheme } from '@mui/material'
3
+ import { useWeb3React } from '@web3-react/core'
4
+ import { CHAINS, isEmpty } from '@huma-finance/shared'
5
+ import React from 'react'
6
+
7
+ import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
8
+ import { setStep } from '../../../store/widgets.reducers'
9
+ import { selectWidgetState } from '../../../store/widgets.selectors'
10
+ import { WIDGET_STEP } from '../../../store/widgets.store'
11
+
12
+ export function ConfirmTransfer(): React.ReactElement | null {
13
+ const theme = useTheme()
14
+ const dispatch = useAppDispatch()
15
+ const { chainId } = useWeb3React()
16
+ const { borrowAmount, approval } = useAppSelector(selectWidgetState)
17
+
18
+ const styles = {
19
+ wrapper: css`
20
+ height: 518px;
21
+ position: relative;
22
+ ${theme.cssMixins.colStretch};
23
+ `,
24
+ header: css`
25
+ ${theme.cssMixins.rowHCentered};
26
+ margin-top: -5px;
27
+ `,
28
+ description: css`
29
+ font-weight: 500;
30
+ font-size: 16px;
31
+ color: #49505b;
32
+ margin-top: 30px;
33
+ `,
34
+ transferWrapper: css`
35
+ margin-top: 75px;
36
+ `,
37
+ transfer: css`
38
+ ${theme.cssMixins.rowSpaceBetweened}
39
+ ${theme.cssMixins.rowVCentered}
40
+ height: 72px;
41
+ background: #f9f8fa;
42
+ border-radius: 4px;
43
+ font-weight: 500;
44
+ font-size: 16px;
45
+ color: #49505b;
46
+ padding: 24px 32px;
47
+ margin-bottom: 9px;
48
+ position: relative;
49
+ `,
50
+ arrow: css`
51
+ color: #d2d0d6;
52
+ position: absolute;
53
+ margin: auto;
54
+ top: 0;
55
+ left: 0;
56
+ bottom: 0;
57
+ right: 0;
58
+ `,
59
+ okButton: css`
60
+ width: 100%;
61
+ position: absolute;
62
+ bottom: 0;
63
+ `,
64
+ }
65
+
66
+ const handleAction = () => {
67
+ const step = CHAINS[chainId!].isTestnet
68
+ ? WIDGET_STEP.ApproveAllowance
69
+ : WIDGET_STEP.Permit
70
+ dispatch(setStep(step))
71
+ }
72
+
73
+ if (isEmpty(borrowAmount) || isEmpty(approval)) {
74
+ return null
75
+ }
76
+
77
+ return (
78
+ <Box css={styles.wrapper}>
79
+ <Typography variant='h6' css={styles.header}>
80
+ Confirm transaction details
81
+ </Typography>
82
+ <Box css={styles.description}>
83
+ Huma keeps your Tradable Stream NFT as collateral until it's fully paid.
84
+ </Box>
85
+ <Box css={styles.transferWrapper}>
86
+ <Box css={styles.transfer}>
87
+ <Box>Tradable Stream</Box>
88
+ <ArrowForwardIosIcon css={styles.arrow} />
89
+ <Box>Huma</Box>
90
+ </Box>
91
+ <Box css={styles.transfer}>
92
+ <Box>
93
+ {borrowAmount!.toFixed(2)} {approval?.token.symbol}
94
+ </Box>
95
+ <ArrowForwardIosIcon css={styles.arrow} />
96
+ <Box>You</Box>
97
+ </Box>
98
+ </Box>
99
+ <Button variant='contained' css={styles.okButton} onClick={handleAction}>
100
+ Approve Transfer
101
+ </Button>
102
+ </Box>
103
+ )
104
+ }
@@ -1,65 +1,65 @@
1
- import { useWeb3React } from '@web3-react/core'
2
- import {
3
- PoolInfoType,
4
- toBigNumber,
5
- upScale,
6
- usePoolAllowance,
7
- } from '@huma-finance/shared'
8
- import React, { useCallback } from 'react'
9
- import { useDispatch } from 'react-redux'
10
-
11
- import { 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 { ApproveAllowanceModal } from '../../ApproveAllowanceModal'
16
- import { LoadingModal } from '../../LoadingModal'
17
-
18
- type Props = {
19
- poolInfo: PoolInfoType
20
- }
21
-
22
- export function ApproveAllowance({
23
- poolInfo,
24
- }: Props): React.ReactElement | null {
25
- const dispatch = useDispatch()
26
- const { account } = useWeb3React()
27
- const { borrowAmount, approveInfo } = useAppSelector(selectWidgetState)
28
- const { allowance, loaded } = usePoolAllowance(
29
- poolInfo.poolName,
30
- poolInfo.poolType,
31
- account,
32
- )
33
-
34
- const getNewAllowance = () => {
35
- if (!borrowAmount || !loaded) {
36
- return null
37
- }
38
- return toBigNumber(
39
- upScale(borrowAmount, poolInfo.poolUnderlyingToken.decimals),
40
- ).add(allowance)
41
- }
42
-
43
- const handleSuccess = useCallback(() => {
44
- dispatch(setStep(WIDGET_STEP.Permit))
45
- }, [dispatch])
46
-
47
- const newAllowance = getNewAllowance()
48
-
49
- if (!newAllowance) {
50
- return (
51
- <LoadingModal
52
- title={`Approve ${approveInfo?.tokenSymbol}`}
53
- description='Waiting for approval confirmation...'
54
- />
55
- )
56
- }
57
-
58
- return (
59
- <ApproveAllowanceModal
60
- poolInfo={poolInfo}
61
- allowanceAmount={newAllowance}
62
- handleSuccess={handleSuccess}
63
- />
64
- )
65
- }
1
+ import { useWeb3React } from '@web3-react/core'
2
+ import {
3
+ PoolInfoType,
4
+ toBigNumber,
5
+ upScale,
6
+ usePoolAllowance,
7
+ } from '@huma-finance/shared'
8
+ import React, { useCallback } from 'react'
9
+ import { useDispatch } from 'react-redux'
10
+
11
+ import { 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 { ApproveAllowanceModal } from '../../ApproveAllowanceModal'
16
+ import { LoadingModal } from '../../LoadingModal'
17
+
18
+ type Props = {
19
+ poolInfo: PoolInfoType
20
+ }
21
+
22
+ export function ApproveAllowance({
23
+ poolInfo,
24
+ }: Props): React.ReactElement | null {
25
+ const dispatch = useDispatch()
26
+ const { account } = useWeb3React()
27
+ const { borrowAmount, approval } = useAppSelector(selectWidgetState)
28
+ const { allowance, loaded } = usePoolAllowance(
29
+ poolInfo.poolName,
30
+ poolInfo.poolType,
31
+ account,
32
+ )
33
+
34
+ const getNewAllowance = () => {
35
+ if (!borrowAmount || !loaded) {
36
+ return null
37
+ }
38
+ return toBigNumber(
39
+ upScale(borrowAmount, poolInfo.poolUnderlyingToken.decimals),
40
+ ).add(allowance)
41
+ }
42
+
43
+ const handleSuccess = useCallback(() => {
44
+ dispatch(setStep(WIDGET_STEP.Permit))
45
+ }, [dispatch])
46
+
47
+ const newAllowance = getNewAllowance()
48
+
49
+ if (!newAllowance) {
50
+ return (
51
+ <LoadingModal
52
+ title={`Approve ${approval?.token?.symbol}`}
53
+ description='Waiting for approval confirmation...'
54
+ />
55
+ )
56
+ }
57
+
58
+ return (
59
+ <ApproveAllowanceModal
60
+ poolInfo={poolInfo}
61
+ allowanceAmount={newAllowance}
62
+ handleSuccess={handleSuccess}
63
+ />
64
+ )
65
+ }