@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.
- package/dist/cjs/index.cjs +139 -131
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/index.js +139 -131
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/components/Activity.tsx +123 -123
- package/src/components/AllowListModal.tsx +113 -113
- package/src/components/ApproveAllowanceModal.tsx +118 -118
- package/src/components/ChooseAmountModal.tsx +315 -315
- package/src/components/CreditLine/borrow/1-Evaluation.tsx +158 -159
- package/src/components/CreditLine/borrow/2-AllowList.tsx +34 -34
- package/src/components/CreditLine/borrow/3-ChooseAmount.tsx +74 -74
- package/src/components/CreditLine/borrow/4-ApproveAllowance.tsx +29 -29
- package/src/components/CreditLine/borrow/5-Transfer.tsx +30 -30
- package/src/components/CreditLine/borrow/6-Success.tsx +30 -30
- package/src/components/CreditLine/borrow/index.tsx +119 -119
- package/src/components/CreditLine/payment/1-ChooseAmount.tsx +67 -67
- package/src/components/CreditLine/payment/2-ApproveAllowance.tsx +23 -23
- package/src/components/CreditLine/payment/3-Transfer.tsx +34 -34
- package/src/components/CreditLine/payment/4-Success.tsx +39 -39
- package/src/components/CreditLine/payment/index.tsx +94 -94
- package/src/components/ErrorModal.tsx +132 -132
- package/src/components/Factoring/FactoredList.tsx +143 -143
- package/src/components/Factoring/UpcomingList.tsx +90 -90
- package/src/components/InvoiceFactoring/borrow/1-Evaluation.tsx +52 -46
- package/src/components/InvoiceFactoring/borrow/2-AllowList.tsx +34 -34
- package/src/components/InvoiceFactoring/borrow/3-ChooseAmount.tsx +86 -92
- package/src/components/InvoiceFactoring/borrow/4-ConfirmTransfer.tsx +104 -104
- package/src/components/InvoiceFactoring/borrow/5-ApproveNFT.tsx +55 -55
- package/src/components/InvoiceFactoring/borrow/6-Transfer.tsx +34 -34
- package/src/components/InvoiceFactoring/borrow/7-Success.tsx +3 -3
- package/src/components/InvoiceFactoring/borrow/index.tsx +96 -96
- package/src/components/InvoiceFactoring/payment/1-ChooseAmount.tsx +67 -67
- package/src/components/InvoiceFactoring/payment/2-ApproveAllowance.tsx +23 -23
- package/src/components/InvoiceFactoring/payment/3-Transfer.tsx +34 -34
- package/src/components/InvoiceFactoring/payment/4-Success.tsx +23 -23
- package/src/components/InvoiceFactoring/payment/index.tsx +86 -86
- package/src/components/Lend/supply/1-Evaluation.tsx +86 -86
- package/src/components/Lend/supply/2-ChooseAmount.tsx +70 -70
- package/src/components/Lend/supply/3-ApproveAllowance.tsx +25 -25
- package/src/components/Lend/supply/4-ConfirmTransfer.tsx +104 -104
- package/src/components/Lend/supply/6-Transfer.tsx +32 -32
- package/src/components/Lend/supply/7-Success.tsx +49 -49
- package/src/components/Lend/supply/index.tsx +144 -144
- package/src/components/Lend/withdraw/1-CheckWithdrawble.tsx +73 -73
- package/src/components/Lend/withdraw/2-ChooseAmount.tsx +50 -50
- package/src/components/Lend/withdraw/3-Transfer.tsx +32 -32
- package/src/components/Lend/withdraw/4-Success.tsx +49 -49
- package/src/components/Lend/withdraw/index.tsx +101 -101
- package/src/components/StreamFactoring/borrow/1-Evaluation.tsx +47 -57
- package/src/components/StreamFactoring/borrow/2-ChooseAmount.tsx +124 -124
- package/src/components/StreamFactoring/borrow/3-ConfirmTransfer.tsx +104 -104
- package/src/components/StreamFactoring/borrow/4-ApproveAllowance.tsx +65 -65
- package/src/components/StreamFactoring/borrow/5-Permit.tsx +144 -144
- package/src/components/StreamFactoring/borrow/6-Transfer.tsx +37 -37
- package/src/components/StreamFactoring/borrow/7-Success.tsx +2 -2
- package/src/components/StreamFactoring/borrow/index.tsx +94 -95
- package/src/components/StreamFactoring/payment/ChooseAmount.tsx +54 -54
- package/src/components/StreamFactoring/payment/Success.tsx +23 -23
- package/src/components/StreamFactoring/payment/Transfer.tsx +34 -34
- package/src/components/StreamFactoring/payment/index.tsx +66 -66
- package/src/components/SuperfluidFactoring/SuperfluidFactoredList.tsx +61 -61
- package/src/components/SuperfluidFactoring/SuperfluidUpcomingList.tsx +185 -185
- package/src/components/SuperfluidFactoring/index.tsx +85 -85
- package/src/components/TxDoneModal.tsx +83 -83
- package/src/components/TxSendModal.tsx +59 -59
- package/src/components/ViewOnExplorer.tsx +26 -26
- package/src/components/WidgetWrapper.tsx +74 -74
- package/src/components/humaModal/HumaModal.tsx +68 -68
- package/src/cosmos/SDKTesting.fixture.tsx +557 -515
- package/src/hooks/useEA.ts +72 -70
- package/src/index.tsx +219 -219
- package/src/store/widgets.reducers.ts +120 -120
- package/src/store/widgets.store.ts +55 -55
- package/src/theme/components.ts +1 -1
- 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 {
|
|
27
|
-
const { getFeesCharged } = useFeeManager(poolInfo.poolName, poolInfo.poolType)
|
|
28
|
-
const [chargedFees, setChargedFees] = useState(0)
|
|
29
|
-
const [currentAmount, setCurrentAmount] = useState(0)
|
|
30
|
-
const borrowPeriodInSeconds =
|
|
31
|
-
|
|
32
|
-
const getBorrowFlowrateAndAmount = useCallback(
|
|
33
|
-
(borrowAmount: number) => {
|
|
34
|
-
const currentFlowRateBN = toBigNumber(currentFlowRate)
|
|
35
|
-
const borrowAmountBN = toBigNumber(
|
|
36
|
-
upScale(borrowAmount,
|
|
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
|
-
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
return {
|
|
63
|
-
borrowFlowrate: borrowFlowrate.toString(),
|
|
64
|
-
borrowAmount: Number(newBorrowAmount),
|
|
65
|
-
borrowAmountBN: newBorrowAmountBN.toString(),
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
[
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
const handleChangeAmount = useCallback(
|
|
72
|
-
(newAmount: number) => {
|
|
73
|
-
if (
|
|
74
|
-
setCurrentAmount(newAmount)
|
|
75
|
-
setChargedFees(getFeesCharged(newAmount))
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
[
|
|
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 (!
|
|
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(
|
|
115
|
-
currentAmount={currentAmount}
|
|
116
|
-
tokenSymbol={
|
|
117
|
-
topLeft='Fees'
|
|
118
|
-
topRight={`${chargedFees} ${
|
|
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,
|
|
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(
|
|
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)} {
|
|
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,
|
|
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 ${
|
|
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
|
+
}
|