@huma-finance/widgets 0.0.34 → 0.0.36

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 (181) 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 +1939 -1866
  19. package/dist/cjs/index.cjs.map +1 -1
  20. package/dist/index.d.ts +227 -195
  21. package/dist/index.js +1942 -1870
  22. package/dist/index.js.map +1 -1
  23. package/jsdoc2md.json +20 -20
  24. package/package.json +5 -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 +128 -132
  30. package/src/components/ApolloWrapper.tsx +15 -15
  31. package/src/components/ApproveAllowanceModal.tsx +138 -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/approve/1-ApproveAllowance.tsx +34 -0
  37. package/src/components/CreditLine/approve/2-Success.tsx +43 -0
  38. package/src/components/CreditLine/approve/index.tsx +85 -0
  39. package/src/components/CreditLine/borrow/1-Evaluation.tsx +157 -157
  40. package/src/components/CreditLine/borrow/2-ChooseAmount.tsx +74 -68
  41. package/src/components/CreditLine/borrow/{4-ApproveAllowance.tsx → 3-ApproveAllowance.tsx} +29 -29
  42. package/src/components/CreditLine/borrow/{3-Transfer.tsx → 4-Transfer.tsx} +34 -44
  43. package/src/components/CreditLine/borrow/5-Success.tsx +38 -38
  44. package/src/components/CreditLine/borrow/6-Notifications.tsx +10 -10
  45. package/src/components/CreditLine/borrow/index.tsx +136 -136
  46. package/src/components/CreditLine/payment/1-ChooseAmount.tsx +67 -67
  47. package/src/components/CreditLine/payment/2-ApproveAllowance.tsx +23 -23
  48. package/src/components/CreditLine/payment/3-Transfer.tsx +34 -34
  49. package/src/components/CreditLine/payment/4-Success.tsx +39 -39
  50. package/src/components/CreditLine/payment/index.tsx +94 -94
  51. package/src/components/ErrorModal.tsx +136 -132
  52. package/src/components/Factoring/FactoredList.tsx +143 -143
  53. package/src/components/Factoring/UpcomingList.tsx +90 -90
  54. package/src/components/Factoring/index.ts +2 -2
  55. package/src/components/HumaLoading.tsx +68 -68
  56. package/src/components/HumaSnackBar.tsx +60 -60
  57. package/src/components/HumaTable.tsx +203 -158
  58. package/src/components/InvoiceFactoring/borrow/1-Evaluation.tsx +49 -49
  59. package/src/components/InvoiceFactoring/borrow/2-ChooseAmount.tsx +88 -88
  60. package/src/components/InvoiceFactoring/borrow/3-ConfirmTransfer.tsx +37 -37
  61. package/src/components/InvoiceFactoring/borrow/4-ApproveNFT.tsx +55 -55
  62. package/src/components/InvoiceFactoring/borrow/5-Transfer.tsx +34 -34
  63. package/src/components/InvoiceFactoring/borrow/6-Success.tsx +20 -20
  64. package/src/components/InvoiceFactoring/borrow/index.tsx +94 -94
  65. package/src/components/InvoiceFactoring/payment/1-ChooseAmount.tsx +67 -67
  66. package/src/components/InvoiceFactoring/payment/2-ApproveAllowance.tsx +23 -23
  67. package/src/components/InvoiceFactoring/payment/3-Transfer.tsx +34 -34
  68. package/src/components/InvoiceFactoring/payment/4-Success.tsx +23 -23
  69. package/src/components/InvoiceFactoring/payment/index.tsx +86 -86
  70. package/src/components/Lend/supply/1-Evaluation/EvaluationEA.tsx +90 -86
  71. package/src/components/Lend/supply/1-Evaluation/EvaluationKYC.tsx +319 -287
  72. package/src/components/Lend/supply/1-Evaluation/index.tsx +31 -31
  73. package/src/components/Lend/supply/2-ChooseAmount.tsx +69 -69
  74. package/src/components/Lend/supply/3-ApproveAllowance.tsx +25 -25
  75. package/src/components/Lend/supply/4-Transfer.tsx +32 -32
  76. package/src/components/Lend/supply/5-Success.tsx +60 -60
  77. package/src/components/Lend/supply/6-Notifications.tsx +10 -10
  78. package/src/components/Lend/supply/index.tsx +167 -167
  79. package/src/components/Lend/withdraw/1-CheckWithdrawble.tsx +73 -73
  80. package/src/components/Lend/withdraw/2-ChooseAmount.tsx +50 -50
  81. package/src/components/Lend/withdraw/3-Transfer.tsx +32 -32
  82. package/src/components/Lend/withdraw/4-Success.tsx +49 -49
  83. package/src/components/Lend/withdraw/index.tsx +101 -101
  84. package/src/components/LoadingModal.tsx +49 -49
  85. package/src/components/Notifi/NotifiSubscriptionModal.tsx +268 -264
  86. package/src/components/StreamFactoring/borrow/1-Evaluation.tsx +55 -55
  87. package/src/components/StreamFactoring/borrow/2-ChooseAmount.tsx +127 -127
  88. package/src/components/StreamFactoring/borrow/3-ConfirmTransfer.tsx +42 -42
  89. package/src/components/StreamFactoring/borrow/4-ApproveAllowance.tsx +33 -33
  90. package/src/components/StreamFactoring/borrow/5-Permit.tsx +144 -144
  91. package/src/components/StreamFactoring/borrow/6-Transfer.tsx +37 -37
  92. package/src/components/StreamFactoring/borrow/7-Success.tsx +20 -20
  93. package/src/components/StreamFactoring/borrow/index.tsx +94 -94
  94. package/src/components/StreamFactoring/payment/ChooseAmount.tsx +54 -54
  95. package/src/components/StreamFactoring/payment/Success.tsx +23 -23
  96. package/src/components/StreamFactoring/payment/Transfer.tsx +34 -34
  97. package/src/components/StreamFactoring/payment/index.tsx +66 -66
  98. package/src/components/SuperfluidFactoring/SuperfluidFactoredList.tsx +69 -70
  99. package/src/components/SuperfluidFactoring/SuperfluidUpcomingList.tsx +166 -167
  100. package/src/components/SuperfluidFactoring/index.tsx +85 -85
  101. package/src/components/TxDoneModal.tsx +85 -85
  102. package/src/components/TxSendModal.tsx +59 -59
  103. package/src/components/ViewOnExplorer.tsx +23 -26
  104. package/src/components/WidgetWrapper.tsx +74 -74
  105. package/src/components/WrapperModal.tsx +54 -54
  106. package/src/components/buttons/TableActionButton.tsx +36 -36
  107. package/src/components/buttons/index.ts +1 -1
  108. package/src/components/humaModal/HumaModal.tsx +68 -68
  109. package/src/components/humaModal/HumaModalHeader.tsx +70 -70
  110. package/src/components/humaModal/index.tsx +2 -2
  111. package/src/components/icons/approve-lender.svg +58 -30
  112. package/src/components/icons/auto-payback.svg +139 -40
  113. package/src/components/icons/check-circle.svg +3 -3
  114. package/src/components/icons/check-green.svg +3 -3
  115. package/src/components/icons/check.svg +10 -10
  116. package/src/components/icons/donut.svg +904 -904
  117. package/src/components/icons/ellipse.svg +3 -3
  118. package/src/components/icons/huma-full.svg +22 -22
  119. package/src/components/icons/huma.svg +15 -15
  120. package/src/components/icons/index.tsx +93 -93
  121. package/src/components/icons/loader.svg +229 -229
  122. package/src/components/icons/metamask.svg +31 -31
  123. package/src/components/icons/polygon.svg +16 -16
  124. package/src/components/icons/receipt.svg +3 -3
  125. package/src/components/icons/separator.svg +3 -3
  126. package/src/components/icons/sorry.svg +17 -31
  127. package/src/components/icons/usdc.svg +5 -5
  128. package/src/components/icons/wallet-connect.svg +11 -11
  129. package/src/components/images/approve-lender.png +0 -0
  130. package/src/components/images/auto-payback.png +0 -0
  131. package/src/components/images/index.ts +3 -0
  132. package/src/components/images/sorry.png +0 -0
  133. package/src/cosmos/CreditLineBorrow.fixture.tsx +86 -86
  134. package/src/cosmos/CreditLinePayment.fixture.tsx +50 -50
  135. package/src/cosmos/InvoiceFactoringBorrow.fixture.tsx +111 -111
  136. package/src/cosmos/InvoiceFactoringPayment.fixture.tsx +67 -67
  137. package/src/cosmos/LendSupply.fixture.tsx +75 -75
  138. package/src/cosmos/LendWithdraw.fixture.tsx +43 -43
  139. package/src/cosmos/SDKTesting.fixture.tsx +616 -616
  140. package/src/cosmos/SuperfluidFactoringBorrow.fixture.tsx +15 -15
  141. package/src/cosmos/WalletWrapper.tsx +52 -52
  142. package/src/cosmos/abis/InvoiceNFT.json +644 -644
  143. package/src/cosmos/abis/ReceivableFactoringPool.json +1529 -1529
  144. package/src/cosmos/utils/env.ts +6 -6
  145. package/src/cosmos/utils/index.ts +169 -169
  146. package/src/fonts/Recoleta/Recoleta-Black.otf +0 -0
  147. package/src/fonts/Recoleta/Recoleta-Bold.otf +0 -0
  148. package/src/fonts/Recoleta/Recoleta-Light.otf +0 -0
  149. package/src/fonts/Recoleta/Recoleta-Medium.otf +0 -0
  150. package/src/fonts/Recoleta/Recoleta-Regular.otf +0 -0
  151. package/src/fonts/Recoleta/Recoleta-RegularDEMO.otf +0 -0
  152. package/src/fonts/Recoleta/Recoleta-SemiBold.otf +0 -0
  153. package/src/fonts/Recoleta/Recoleta-Thin.otf +0 -0
  154. package/src/hooks/useEA.ts +53 -53
  155. package/src/hooks/useElementDimensions.ts +30 -0
  156. package/src/hooks/useNotifi.ts +71 -71
  157. package/src/hooks/useRedux.ts +6 -6
  158. package/src/index.css +61 -61
  159. package/src/index.tsx +283 -301
  160. package/src/react-app-env.d.ts +1 -1
  161. package/src/reportWebVitals.ts +15 -15
  162. package/src/setupTests.ts +6 -6
  163. package/src/store/index.ts +27 -27
  164. package/src/store/widgets.reducers.ts +120 -120
  165. package/src/store/widgets.selectors.ts +3 -3
  166. package/src/store/widgets.store.ts +55 -55
  167. package/src/theme/breakpoints.ts +10 -10
  168. package/src/theme/components.ts +70 -70
  169. package/src/theme/coreThemeConstants.ts +29 -29
  170. package/src/theme/cssMixins.ts +92 -92
  171. package/src/theme/hooks/useGetSizes.ts +31 -31
  172. package/src/theme/index.ts +24 -24
  173. package/src/theme/palette.ts +150 -150
  174. package/src/theme/shape.ts +7 -7
  175. package/src/theme/theme.types.ts +80 -80
  176. package/src/theme/typography.ts +117 -117
  177. package/src/utilTypes.d.ts +30 -31
  178. package/src/utils/env.ts +10 -10
  179. package/tsconfig.build.json +7 -7
  180. package/tsconfig.json +32 -32
  181. package/webpack.cosmos.js +54 -54
@@ -1,38 +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
- 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
- }
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
+ }
@@ -1,10 +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
+ 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,136 +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
- 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
- }
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 './3-ApproveAllowance'
21
+ import { Transfer } from './4-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
+ }
@@ -1,67 +1,67 @@
1
- import { useWeb3React } from '@web3-react/core'
2
- import {
3
- PoolInfoType,
4
- toBigNumber,
5
- upScale,
6
- useCLPoolAllowance,
7
- } from '@huma-finance/shared'
8
- import React, { useCallback, useEffect, useState } from 'react'
9
-
10
- import { useAppDispatch } from '../../../hooks/useRedux'
11
- import { setPaymentAmount, setStep } from '../../../store/widgets.reducers'
12
- import { WIDGET_STEP } from '../../../store/widgets.store'
13
- import { ChooseAmountModal } from '../../ChooseAmountModal'
14
-
15
- type Props = {
16
- payoffAmount: number
17
- totalDueAmount: number
18
- poolInfo: PoolInfoType
19
- }
20
-
21
- export function ChooseAmount({
22
- payoffAmount,
23
- totalDueAmount,
24
- poolInfo,
25
- }: Props): React.ReactElement | null {
26
- const dispatch = useAppDispatch()
27
- const { account } = useWeb3React()
28
- const { symbol, decimals } = poolInfo.poolUnderlyingToken
29
- const [currentAmount, setCurrentAmount] = useState(0)
30
- const { allowance } = useCLPoolAllowance(poolInfo.poolName, account)
31
-
32
- useEffect(() => {
33
- setCurrentAmount(totalDueAmount)
34
- dispatch(setPaymentAmount({ paymentAmount: totalDueAmount }))
35
- }, [dispatch, totalDueAmount])
36
-
37
- const handleChangeAmount = useCallback(
38
- (newAmount: number) => {
39
- setCurrentAmount(newAmount)
40
- dispatch(setPaymentAmount({ paymentAmount: newAmount }))
41
- },
42
- [dispatch],
43
- )
44
-
45
- const handleAction = useCallback(() => {
46
- const payAmount = upScale(currentAmount, decimals)
47
- const step = toBigNumber(payAmount).gt(allowance)
48
- ? WIDGET_STEP.ApproveAllowance
49
- : WIDGET_STEP.Transfer
50
- dispatch(setStep(step))
51
- }, [allowance, currentAmount, decimals, dispatch])
52
-
53
- return (
54
- <ChooseAmountModal
55
- title='Pay'
56
- description1='Choose amount'
57
- sliderMax={payoffAmount}
58
- currentAmount={currentAmount}
59
- tokenSymbol={symbol}
60
- handleChangeAmount={handleChangeAmount}
61
- handleAction={handleAction}
62
- actionText='pay'
63
- payoffAmount={payoffAmount}
64
- hideTerms
65
- />
66
- )
67
- }
1
+ import { useWeb3React } from '@web3-react/core'
2
+ import {
3
+ PoolInfoType,
4
+ toBigNumber,
5
+ upScale,
6
+ useCLPoolAllowance,
7
+ } from '@huma-finance/shared'
8
+ import React, { useCallback, useEffect, useState } from 'react'
9
+
10
+ import { useAppDispatch } from '../../../hooks/useRedux'
11
+ import { setPaymentAmount, setStep } from '../../../store/widgets.reducers'
12
+ import { WIDGET_STEP } from '../../../store/widgets.store'
13
+ import { ChooseAmountModal } from '../../ChooseAmountModal'
14
+
15
+ type Props = {
16
+ payoffAmount: number
17
+ totalDueAmount: number
18
+ poolInfo: PoolInfoType
19
+ }
20
+
21
+ export function ChooseAmount({
22
+ payoffAmount,
23
+ totalDueAmount,
24
+ poolInfo,
25
+ }: Props): React.ReactElement | null {
26
+ const dispatch = useAppDispatch()
27
+ const { account } = useWeb3React()
28
+ const { symbol, decimals } = poolInfo.poolUnderlyingToken
29
+ const [currentAmount, setCurrentAmount] = useState(0)
30
+ const { allowance } = useCLPoolAllowance(poolInfo.poolName, account)
31
+
32
+ useEffect(() => {
33
+ setCurrentAmount(totalDueAmount)
34
+ dispatch(setPaymentAmount({ paymentAmount: totalDueAmount }))
35
+ }, [dispatch, totalDueAmount])
36
+
37
+ const handleChangeAmount = useCallback(
38
+ (newAmount: number) => {
39
+ setCurrentAmount(newAmount)
40
+ dispatch(setPaymentAmount({ paymentAmount: newAmount }))
41
+ },
42
+ [dispatch],
43
+ )
44
+
45
+ const handleAction = useCallback(() => {
46
+ const payAmount = upScale(currentAmount, decimals)
47
+ const step = toBigNumber(payAmount).gt(allowance)
48
+ ? WIDGET_STEP.ApproveAllowance
49
+ : WIDGET_STEP.Transfer
50
+ dispatch(setStep(step))
51
+ }, [allowance, currentAmount, decimals, dispatch])
52
+
53
+ return (
54
+ <ChooseAmountModal
55
+ title='Pay'
56
+ description1='Choose amount'
57
+ sliderMax={payoffAmount}
58
+ currentAmount={currentAmount}
59
+ tokenSymbol={symbol}
60
+ handleChangeAmount={handleChangeAmount}
61
+ handleAction={handleAction}
62
+ actionText='pay'
63
+ payoffAmount={payoffAmount}
64
+ hideTerms
65
+ />
66
+ )
67
+ }
@@ -1,23 +1,23 @@
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({ poolInfo }: Props): React.ReactElement {
14
- const dispatch = useAppDispatch()
15
-
16
- const handleSuccess = useCallback(() => {
17
- dispatch(setStep(WIDGET_STEP.Transfer))
18
- }, [dispatch])
19
-
20
- return (
21
- <ApproveAllowanceModal poolInfo={poolInfo} handleSuccess={handleSuccess} />
22
- )
23
- }
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({ poolInfo }: Props): React.ReactElement {
14
+ const dispatch = useAppDispatch()
15
+
16
+ const handleSuccess = useCallback(() => {
17
+ dispatch(setStep(WIDGET_STEP.Transfer))
18
+ }, [dispatch])
19
+
20
+ return (
21
+ <ApproveAllowanceModal poolInfo={poolInfo} handleSuccess={handleSuccess} />
22
+ )
23
+ }
@@ -1,34 +1,34 @@
1
- import { useWeb3React } from '@web3-react/core'
2
- import { PoolInfoType, toBigNumber, upScale } from '@huma-finance/shared'
3
- import React, { useCallback } from 'react'
4
-
5
- import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
6
- import { selectWidgetState } from '../../../store/widgets.selectors'
7
- import { setStep } from '../../../store/widgets.reducers'
8
- import { WIDGET_STEP } from '../../../store/widgets.store'
9
- import { TxSendModal } from '../../TxSendModal'
10
-
11
- type Props = {
12
- poolInfo: PoolInfoType
13
- }
14
-
15
- export function Transfer({ poolInfo }: Props): React.ReactElement {
16
- const dispatch = useAppDispatch()
17
- const { account } = useWeb3React()
18
- const { paymentAmount } = useAppSelector(selectWidgetState)
19
- const { decimals } = poolInfo.poolUnderlyingToken
20
- const paymentBigNumber = toBigNumber(upScale(paymentAmount!, decimals))
21
-
22
- const handleSuccess = useCallback(() => {
23
- dispatch(setStep(WIDGET_STEP.Done))
24
- }, [dispatch])
25
-
26
- return (
27
- <TxSendModal
28
- poolInfo={poolInfo}
29
- method='makePayment'
30
- params={[account, paymentBigNumber]}
31
- handleSuccess={handleSuccess}
32
- />
33
- )
34
- }
1
+ import { useWeb3React } from '@web3-react/core'
2
+ import { PoolInfoType, toBigNumber, upScale } from '@huma-finance/shared'
3
+ import React, { useCallback } from 'react'
4
+
5
+ import { useAppDispatch, useAppSelector } from '../../../hooks/useRedux'
6
+ import { selectWidgetState } from '../../../store/widgets.selectors'
7
+ import { setStep } from '../../../store/widgets.reducers'
8
+ import { WIDGET_STEP } from '../../../store/widgets.store'
9
+ import { TxSendModal } from '../../TxSendModal'
10
+
11
+ type Props = {
12
+ poolInfo: PoolInfoType
13
+ }
14
+
15
+ export function Transfer({ poolInfo }: Props): React.ReactElement {
16
+ const dispatch = useAppDispatch()
17
+ const { account } = useWeb3React()
18
+ const { paymentAmount } = useAppSelector(selectWidgetState)
19
+ const { decimals } = poolInfo.poolUnderlyingToken
20
+ const paymentBigNumber = toBigNumber(upScale(paymentAmount!, decimals))
21
+
22
+ const handleSuccess = useCallback(() => {
23
+ dispatch(setStep(WIDGET_STEP.Done))
24
+ }, [dispatch])
25
+
26
+ return (
27
+ <TxSendModal
28
+ poolInfo={poolInfo}
29
+ method='makePayment'
30
+ params={[account, paymentBigNumber]}
31
+ handleSuccess={handleSuccess}
32
+ />
33
+ )
34
+ }