@huma-finance/widgets 0.0.31 → 0.0.32

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 (176) 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 +1026 -296
  19. package/dist/cjs/index.cjs.map +1 -1
  20. package/dist/index.d.ts +193 -193
  21. package/dist/index.js +1028 -299
  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/ChooseAmountModal.tsx +322 -322
  35. package/src/components/ConfirmTransferModal.tsx +153 -153
  36. package/src/components/CreditLine/borrow/1-Evaluation.tsx +157 -157
  37. package/src/components/CreditLine/borrow/2-ChooseAmount.tsx +68 -68
  38. package/src/components/CreditLine/borrow/3-Transfer.tsx +44 -44
  39. package/src/components/CreditLine/borrow/4-ApproveAllowance.tsx +29 -29
  40. package/src/components/CreditLine/borrow/5-Success.tsx +38 -30
  41. package/src/components/CreditLine/borrow/6-Notifications.tsx +10 -0
  42. package/src/components/CreditLine/borrow/index.tsx +136 -117
  43. package/src/components/CreditLine/payment/1-ChooseAmount.tsx +67 -67
  44. package/src/components/CreditLine/payment/2-ApproveAllowance.tsx +23 -23
  45. package/src/components/CreditLine/payment/3-Transfer.tsx +34 -34
  46. package/src/components/CreditLine/payment/4-Success.tsx +39 -39
  47. package/src/components/CreditLine/payment/index.tsx +94 -94
  48. package/src/components/ErrorModal.tsx +132 -132
  49. package/src/components/Factoring/FactoredList.tsx +143 -143
  50. package/src/components/Factoring/UpcomingList.tsx +90 -90
  51. package/src/components/Factoring/index.ts +2 -2
  52. package/src/components/HumaLoading.tsx +68 -68
  53. package/src/components/HumaSnackBar.tsx +60 -0
  54. package/src/components/HumaTable.tsx +158 -158
  55. package/src/components/InvoiceFactoring/borrow/1-Evaluation.tsx +49 -49
  56. package/src/components/InvoiceFactoring/borrow/2-ChooseAmount.tsx +88 -88
  57. package/src/components/InvoiceFactoring/borrow/3-ConfirmTransfer.tsx +37 -37
  58. package/src/components/InvoiceFactoring/borrow/4-ApproveNFT.tsx +55 -55
  59. package/src/components/InvoiceFactoring/borrow/5-Transfer.tsx +34 -34
  60. package/src/components/InvoiceFactoring/borrow/6-Success.tsx +20 -20
  61. package/src/components/InvoiceFactoring/borrow/index.tsx +94 -94
  62. package/src/components/InvoiceFactoring/payment/1-ChooseAmount.tsx +67 -67
  63. package/src/components/InvoiceFactoring/payment/2-ApproveAllowance.tsx +23 -23
  64. package/src/components/InvoiceFactoring/payment/3-Transfer.tsx +34 -34
  65. package/src/components/InvoiceFactoring/payment/4-Success.tsx +23 -23
  66. package/src/components/InvoiceFactoring/payment/index.tsx +86 -86
  67. package/src/components/Lend/supply/1-Evaluation/EvaluationEA.tsx +86 -0
  68. package/src/components/Lend/supply/1-Evaluation/EvaluationKYC.tsx +287 -0
  69. package/src/components/Lend/supply/1-Evaluation/index.tsx +31 -0
  70. package/src/components/Lend/supply/2-ChooseAmount.tsx +69 -70
  71. package/src/components/Lend/supply/3-ApproveAllowance.tsx +25 -25
  72. package/src/components/Lend/supply/{6-Transfer.tsx → 4-Transfer.tsx} +32 -32
  73. package/src/components/Lend/supply/{7-Success.tsx → 5-Success.tsx} +60 -49
  74. package/src/components/Lend/supply/6-Notifications.tsx +10 -0
  75. package/src/components/Lend/supply/index.tsx +167 -144
  76. package/src/components/Lend/withdraw/1-CheckWithdrawble.tsx +73 -73
  77. package/src/components/Lend/withdraw/2-ChooseAmount.tsx +50 -50
  78. package/src/components/Lend/withdraw/3-Transfer.tsx +32 -32
  79. package/src/components/Lend/withdraw/4-Success.tsx +49 -49
  80. package/src/components/Lend/withdraw/index.tsx +101 -101
  81. package/src/components/LoadingModal.tsx +49 -49
  82. package/src/components/Notifi/NotifiSubscriptionModal.tsx +264 -0
  83. package/src/components/StreamFactoring/borrow/1-Evaluation.tsx +55 -55
  84. package/src/components/StreamFactoring/borrow/2-ChooseAmount.tsx +127 -127
  85. package/src/components/StreamFactoring/borrow/3-ConfirmTransfer.tsx +42 -42
  86. package/src/components/StreamFactoring/borrow/4-ApproveAllowance.tsx +33 -33
  87. package/src/components/StreamFactoring/borrow/5-Permit.tsx +144 -144
  88. package/src/components/StreamFactoring/borrow/6-Transfer.tsx +37 -37
  89. package/src/components/StreamFactoring/borrow/7-Success.tsx +20 -20
  90. package/src/components/StreamFactoring/borrow/index.tsx +94 -94
  91. package/src/components/StreamFactoring/payment/ChooseAmount.tsx +54 -54
  92. package/src/components/StreamFactoring/payment/Success.tsx +23 -23
  93. package/src/components/StreamFactoring/payment/Transfer.tsx +34 -34
  94. package/src/components/StreamFactoring/payment/index.tsx +66 -66
  95. package/src/components/SuperfluidFactoring/SuperfluidFactoredList.tsx +70 -70
  96. package/src/components/SuperfluidFactoring/SuperfluidUpcomingList.tsx +167 -167
  97. package/src/components/SuperfluidFactoring/index.tsx +85 -85
  98. package/src/components/TxDoneModal.tsx +85 -83
  99. package/src/components/TxSendModal.tsx +59 -59
  100. package/src/components/ViewOnExplorer.tsx +26 -26
  101. package/src/components/WidgetWrapper.tsx +74 -74
  102. package/src/components/WrapperModal.tsx +54 -54
  103. package/src/components/buttons/TableActionButton.tsx +36 -36
  104. package/src/components/buttons/index.ts +1 -1
  105. package/src/components/humaModal/HumaModal.tsx +68 -68
  106. package/src/components/humaModal/HumaModalHeader.tsx +70 -70
  107. package/src/components/humaModal/index.tsx +2 -2
  108. package/src/components/icons/approve-lender.svg +30 -30
  109. package/src/components/icons/auto-payback.svg +40 -40
  110. package/src/components/icons/check-circle.svg +3 -3
  111. package/src/components/icons/check-green.svg +3 -3
  112. package/src/components/icons/check.svg +10 -10
  113. package/src/components/icons/donut.svg +904 -904
  114. package/src/components/icons/ellipse.svg +3 -3
  115. package/src/components/icons/huma-full.svg +22 -22
  116. package/src/components/icons/huma.svg +15 -15
  117. package/src/components/icons/index.tsx +93 -93
  118. package/src/components/icons/loader.svg +229 -229
  119. package/src/components/icons/metamask.svg +31 -31
  120. package/src/components/icons/polygon.svg +16 -16
  121. package/src/components/icons/receipt.svg +3 -3
  122. package/src/components/icons/separator.svg +3 -3
  123. package/src/components/icons/sorry.svg +31 -31
  124. package/src/components/icons/usdc.svg +5 -5
  125. package/src/components/icons/wallet-connect.svg +11 -11
  126. package/src/cosmos/CreditLineBorrow.fixture.tsx +86 -86
  127. package/src/cosmos/CreditLinePayment.fixture.tsx +50 -50
  128. package/src/cosmos/InvoiceFactoringBorrow.fixture.tsx +111 -111
  129. package/src/cosmos/InvoiceFactoringPayment.fixture.tsx +67 -67
  130. package/src/cosmos/LendSupply.fixture.tsx +75 -75
  131. package/src/cosmos/LendWithdraw.fixture.tsx +43 -43
  132. package/src/cosmos/SDKTesting.fixture.tsx +616 -616
  133. package/src/cosmos/SuperfluidFactoringBorrow.fixture.tsx +15 -15
  134. package/src/cosmos/WalletWrapper.tsx +52 -52
  135. package/src/cosmos/abis/InvoiceNFT.json +644 -644
  136. package/src/cosmos/abis/ReceivableFactoringPool.json +1529 -1529
  137. package/src/cosmos/utils/env.ts +6 -6
  138. package/src/cosmos/utils/index.ts +169 -169
  139. package/src/fonts/Recoleta/Recoleta-Black.otf +0 -0
  140. package/src/fonts/Recoleta/Recoleta-Bold.otf +0 -0
  141. package/src/fonts/Recoleta/Recoleta-Light.otf +0 -0
  142. package/src/fonts/Recoleta/Recoleta-Medium.otf +0 -0
  143. package/src/fonts/Recoleta/Recoleta-Regular.otf +0 -0
  144. package/src/fonts/Recoleta/Recoleta-RegularDEMO.otf +0 -0
  145. package/src/fonts/Recoleta/Recoleta-SemiBold.otf +0 -0
  146. package/src/fonts/Recoleta/Recoleta-Thin.otf +0 -0
  147. package/src/hooks/useEA.ts +53 -53
  148. package/src/hooks/useNotifi.ts +71 -0
  149. package/src/hooks/useRedux.ts +6 -6
  150. package/src/index.css +61 -61
  151. package/src/index.tsx +301 -301
  152. package/src/react-app-env.d.ts +1 -1
  153. package/src/reportWebVitals.ts +15 -15
  154. package/src/setupTests.ts +6 -6
  155. package/src/store/index.ts +27 -27
  156. package/src/store/widgets.reducers.ts +120 -120
  157. package/src/store/widgets.selectors.ts +3 -3
  158. package/src/store/widgets.store.ts +55 -54
  159. package/src/theme/breakpoints.ts +10 -10
  160. package/src/theme/components.ts +70 -70
  161. package/src/theme/coreThemeConstants.ts +29 -29
  162. package/src/theme/cssMixins.ts +92 -92
  163. package/src/theme/hooks/useGetSizes.ts +31 -31
  164. package/src/theme/index.ts +24 -24
  165. package/src/theme/palette.ts +150 -150
  166. package/src/theme/shape.ts +7 -7
  167. package/src/theme/theme.types.ts +80 -80
  168. package/src/theme/typography.ts +117 -117
  169. package/src/utilTypes.d.ts +31 -31
  170. package/src/utils/env.ts +10 -10
  171. package/tsconfig.build.json +7 -7
  172. package/tsconfig.json +32 -32
  173. package/webpack.cosmos.js +54 -54
  174. package/src/components/Lend/supply/1-Evaluation.tsx +0 -175
  175. package/src/components/Lend/supply/4-ConfirmTransfer.tsx +0 -104
  176. package/src/components/NotifiSubscriptionModal.tsx +0 -84
@@ -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,38 @@
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
+ hasNextStep: boolean
13
+ }
14
+
15
+ export function Success({
16
+ poolInfo,
17
+ creditRecord,
18
+ handleAction,
19
+ hasNextStep,
20
+ }: Props): React.ReactElement {
21
+ const { borrowAmountNet } = useAppSelector(selectWidgetState)
22
+ const { poolUnderlyingToken } = poolInfo
23
+ const { symbol } = poolUnderlyingToken
24
+ const dueDate = timeUtil.timestampToLL(creditRecord?.dueDate.toNumber())
25
+
26
+ const content = [
27
+ `${borrowAmountNet} ${symbol} is now in your wallet.`,
28
+ `Note: your payment will be automatically deducted on ${dueDate}.`,
29
+ ]
30
+
31
+ return (
32
+ <TxDoneModal
33
+ handleAction={handleAction}
34
+ content={content}
35
+ buttonText={hasNextStep ? "WHAT'S NEXT" : undefined}
36
+ />
37
+ )
38
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react'
2
+ import { NotifiSubscriptionModal } from '../../Notifi/NotifiSubscriptionModal'
3
+
4
+ type Props = {
5
+ handleAction: () => void
6
+ }
7
+
8
+ export function Notifications({ handleAction }: Props): React.ReactElement {
9
+ return <NotifiSubscriptionModal handleSuccess={handleAction} />
10
+ }
@@ -1,117 +1,136 @@
1
- import { useWeb3React } from '@web3-react/core'
2
- import {
3
- CreditState,
4
- POOL_NAME,
5
- POOL_TYPE,
6
- useAccountStats,
7
- usePoolInfo,
8
- } from '@huma-finance/shared'
9
- import React, { useCallback, useEffect } from 'react'
10
- import { useDispatch } from 'react-redux'
11
-
12
- import { useAppSelector } from '../../../hooks/useRedux'
13
- import { setStep } from '../../../store/widgets.reducers'
14
- import { selectWidgetState } from '../../../store/widgets.selectors'
15
- import { WIDGET_STEP } from '../../../store/widgets.store'
16
- import { ErrorModal } from '../../ErrorModal'
17
- import { WidgetWrapper } from '../../WidgetWrapper'
18
- import { Evaluation } from './1-Evaluation'
19
- import { ChooseAmount } from './2-ChooseAmount'
20
- import { ApproveAllowance } from './4-ApproveAllowance'
21
- import { Transfer } from './3-Transfer'
22
- import { Success } from './5-Success'
23
-
24
- /**
25
- * Credit line pool borrow props
26
- * @typedef {Object} CreditLineBorrowProps
27
- * @property {POOL_NAME} poolName The name of the pool.
28
- * @property {POOL_TYPE} poolType The type of the pool.
29
- * @property {function():void} handleClose Function to notify to close the widget modal when user clicks the 'x' close button.
30
- * @property {function():void|undefined} handleApprove Optional function to notify when user is approved successfully to borrow again pool.
31
- * @property {function((number|undefined)):void|undefined} handleSuccess Optional function to notify that the credit line pool borrow action is successful.
32
- */
33
- export interface CreditLineBorrowProps {
34
- poolName: keyof typeof POOL_NAME
35
- poolType: keyof typeof POOL_TYPE
36
- handleClose: () => void
37
- handleApprove?: () => void
38
- handleSuccess?: (blockNumber?: number) => void
39
- }
40
-
41
- export function CreditLineBorrow({
42
- poolName: poolNameStr,
43
- poolType: poolTypeStr,
44
- handleClose,
45
- handleApprove,
46
- handleSuccess,
47
- }: CreditLineBorrowProps): React.ReactElement | null {
48
- const dispatch = useDispatch()
49
- const { account } = useWeb3React()
50
- const poolName = POOL_NAME[poolNameStr]
51
- const poolType = POOL_TYPE[poolTypeStr]
52
- const poolInfo = usePoolInfo(poolName, poolType)
53
- const { step, errorMessage } = useAppSelector(selectWidgetState)
54
- const [accountStats, refreshAccountStats] = useAccountStats(
55
- poolName,
56
- poolType,
57
- account,
58
- )
59
- const { creditRecord } = accountStats
60
- const accountState = creditRecord?.state
61
-
62
- useEffect(() => {
63
- if (!step && accountState !== undefined) {
64
- const nextStep =
65
- accountState >= CreditState.Approved
66
- ? WIDGET_STEP.ChooseAmount
67
- : WIDGET_STEP.Evaluation
68
- dispatch(setStep(nextStep))
69
- }
70
- }, [accountState, dispatch, step])
71
-
72
- const approveCallback = useCallback(() => {
73
- if (handleApprove) {
74
- handleApprove()
75
- }
76
- refreshAccountStats()
77
- }, [handleApprove, refreshAccountStats])
78
-
79
- if (!poolInfo) {
80
- return null
81
- }
82
-
83
- return (
84
- <WidgetWrapper
85
- isOpen
86
- isLoading={!creditRecord}
87
- loadingTitle='Borrow'
88
- handleClose={handleClose}
89
- handleSuccess={handleSuccess}
90
- >
91
- {step === WIDGET_STEP.Evaluation && (
92
- <Evaluation poolInfo={poolInfo} handleApprove={approveCallback} />
93
- )}
94
- {step === WIDGET_STEP.ChooseAmount && (
95
- <ChooseAmount poolInfo={poolInfo} accountStats={accountStats} />
96
- )}
97
- {step === WIDGET_STEP.ApproveAllowance && (
98
- <ApproveAllowance poolInfo={poolInfo} />
99
- )}
100
- {step === WIDGET_STEP.Transfer && <Transfer poolInfo={poolInfo} />}
101
- {step === WIDGET_STEP.Done && (
102
- <Success
103
- poolInfo={poolInfo}
104
- handleAction={handleClose}
105
- creditRecord={creditRecord!}
106
- />
107
- )}
108
- {step === WIDGET_STEP.Error && (
109
- <ErrorModal
110
- title='Borrow'
111
- errorMessage={errorMessage}
112
- handleOk={handleClose}
113
- />
114
- )}
115
- </WidgetWrapper>
116
- )
117
- }
1
+ import { useWeb3React } from '@web3-react/core'
2
+ import {
3
+ CreditState,
4
+ POOL_NAME,
5
+ POOL_TYPE,
6
+ useAccountStats,
7
+ usePoolInfo,
8
+ } from '@huma-finance/shared'
9
+ import React, { useCallback, useEffect } from 'react'
10
+ import { useDispatch } from 'react-redux'
11
+
12
+ import { useAppSelector } from '../../../hooks/useRedux'
13
+ import { setStep } from '../../../store/widgets.reducers'
14
+ import { selectWidgetState } from '../../../store/widgets.selectors'
15
+ import { WIDGET_STEP } from '../../../store/widgets.store'
16
+ import { ErrorModal } from '../../ErrorModal'
17
+ import { WidgetWrapper } from '../../WidgetWrapper'
18
+ import { Evaluation } from './1-Evaluation'
19
+ import { ChooseAmount } from './2-ChooseAmount'
20
+ import { ApproveAllowance } from './4-ApproveAllowance'
21
+ import { Transfer } from './3-Transfer'
22
+ import { Success } from './5-Success'
23
+ import { Notifications } from './6-Notifications'
24
+ import {
25
+ useDoesChainSupportNotifi,
26
+ useIsFirstTimeNotifiUser,
27
+ } from '../../../hooks/useNotifi'
28
+
29
+ /**
30
+ * Credit line pool borrow props
31
+ * @typedef {Object} CreditLineBorrowProps
32
+ * @property {POOL_NAME} poolName The name of the pool.
33
+ * @property {POOL_TYPE} poolType The type of the pool.
34
+ * @property {function():void} handleClose Function to notify to close the widget modal when user clicks the 'x' close button.
35
+ * @property {function():void|undefined} handleApprove Optional function to notify when user is approved successfully to borrow again pool.
36
+ * @property {function((number|undefined)):void|undefined} handleSuccess Optional function to notify that the credit line pool borrow action is successful.
37
+ */
38
+ export interface CreditLineBorrowProps {
39
+ poolName: keyof typeof POOL_NAME
40
+ poolType: keyof typeof POOL_TYPE
41
+ handleClose: () => void
42
+ handleApprove?: () => void
43
+ handleSuccess?: (blockNumber?: number) => void
44
+ }
45
+
46
+ export function CreditLineBorrow({
47
+ poolName: poolNameStr,
48
+ poolType: poolTypeStr,
49
+ handleClose,
50
+ handleApprove,
51
+ handleSuccess,
52
+ }: CreditLineBorrowProps): React.ReactElement | null {
53
+ const dispatch = useDispatch()
54
+ const { account, chainId } = useWeb3React()
55
+ const poolName = POOL_NAME[poolNameStr]
56
+ const poolType = POOL_TYPE[poolTypeStr]
57
+ const poolInfo = usePoolInfo(poolName, poolType)
58
+ const { step, errorMessage } = useAppSelector(selectWidgetState)
59
+ const [accountStats, refreshAccountStats] = useAccountStats(
60
+ poolName,
61
+ poolType,
62
+ account,
63
+ )
64
+ const { isFirstTimeNotifiUser } = useIsFirstTimeNotifiUser(account, chainId)
65
+ const { notifiChainSupported } = useDoesChainSupportNotifi(account, chainId)
66
+ const { creditRecord } = accountStats
67
+ const accountState = creditRecord?.state
68
+
69
+ useEffect(() => {
70
+ if (!step && accountState !== undefined) {
71
+ const nextStep =
72
+ accountState >= CreditState.Approved
73
+ ? WIDGET_STEP.ChooseAmount
74
+ : WIDGET_STEP.Evaluation
75
+ dispatch(setStep(nextStep))
76
+ }
77
+ }, [accountState, dispatch, step])
78
+
79
+ const approveCallback = useCallback(() => {
80
+ if (handleApprove) {
81
+ handleApprove()
82
+ }
83
+ refreshAccountStats()
84
+ }, [handleApprove, refreshAccountStats])
85
+
86
+ const setupNotificationsOrClose = useCallback(() => {
87
+ if (isFirstTimeNotifiUser && notifiChainSupported) {
88
+ dispatch(setStep(WIDGET_STEP.Notifications))
89
+ } else {
90
+ handleClose()
91
+ }
92
+ }, [dispatch, handleClose, isFirstTimeNotifiUser, notifiChainSupported])
93
+
94
+ if (!poolInfo) {
95
+ return null
96
+ }
97
+
98
+ return (
99
+ <WidgetWrapper
100
+ isOpen
101
+ isLoading={!creditRecord}
102
+ loadingTitle='Borrow'
103
+ handleClose={handleClose}
104
+ handleSuccess={handleSuccess}
105
+ >
106
+ {step === WIDGET_STEP.Evaluation && (
107
+ <Evaluation poolInfo={poolInfo} handleApprove={approveCallback} />
108
+ )}
109
+ {step === WIDGET_STEP.ChooseAmount && (
110
+ <ChooseAmount poolInfo={poolInfo} accountStats={accountStats} />
111
+ )}
112
+ {step === WIDGET_STEP.ApproveAllowance && (
113
+ <ApproveAllowance poolInfo={poolInfo} />
114
+ )}
115
+ {step === WIDGET_STEP.Transfer && <Transfer poolInfo={poolInfo} />}
116
+ {step === WIDGET_STEP.Done && (
117
+ <Success
118
+ poolInfo={poolInfo}
119
+ handleAction={setupNotificationsOrClose}
120
+ creditRecord={creditRecord!}
121
+ hasNextStep={isFirstTimeNotifiUser}
122
+ />
123
+ )}
124
+ {step === WIDGET_STEP.Notifications && (
125
+ <Notifications handleAction={handleClose} />
126
+ )}
127
+ {step === WIDGET_STEP.Error && (
128
+ <ErrorModal
129
+ title='Borrow'
130
+ errorMessage={errorMessage}
131
+ handleOk={handleClose}
132
+ />
133
+ )}
134
+ </WidgetWrapper>
135
+ )
136
+ }