1
1
import { useCallback } from 'react'
2
2
3
3
import {
4
+ combineStatuses ,
4
5
premiumContentSelectors ,
5
6
purchaseContentActions ,
6
- useGetTrackById
7
+ statusIsNotFinalized ,
8
+ useGetTrackById ,
9
+ useUSDCBalance
7
10
} from '@audius/common'
8
11
import { IconCart , Modal , ModalContentPages , ModalHeader } from '@audius/stems'
9
12
import { useDispatch , useSelector } from 'react-redux'
@@ -27,21 +30,33 @@ enum PurchaseSteps {
27
30
DETAILS = 1
28
31
}
29
32
30
- export const PremiumContentPurchaseModal = ( ) => {
31
- const [ isOpen , setIsOpen ] = useModalState ( 'PremiumContentPurchase' )
33
+ const usePremiumContentPurchaseModalState = ( ) => {
32
34
const trackId = useSelector ( getPurchaseContentId )
33
35
const dispatch = useDispatch ( )
34
- const { data : track } = useGetTrackById (
36
+ const [ isOpen , setIsOpen ] = useModalState ( 'PremiumContentPurchase' )
37
+ const { data : balance , status : balanceStatus } = useUSDCBalance ( )
38
+ const { data : track , status : trackStatus } = useGetTrackById (
35
39
{ id : trackId ! } ,
36
40
{ disabled : ! trackId }
37
41
)
38
42
43
+ const status = combineStatuses ( [ balanceStatus , trackStatus ] )
44
+
39
45
const handleClose = useCallback ( ( ) => {
40
46
setIsOpen ( false )
41
47
dispatch ( purchaseContentActions . cleanup ( ) )
42
48
} , [ setIsOpen , dispatch ] )
43
49
44
- const currentStep = ! track ? PurchaseSteps . LOADING : PurchaseSteps . DETAILS
50
+ const currentStep = statusIsNotFinalized ( status )
51
+ ? PurchaseSteps . LOADING
52
+ : PurchaseSteps . DETAILS
53
+
54
+ return { isOpen, handleClose, currentStep, track, balance, status }
55
+ }
56
+
57
+ export const PremiumContentPurchaseModal = ( ) => {
58
+ const { balance, isOpen, handleClose, currentStep, track } =
59
+ usePremiumContentPurchaseModalState ( )
45
60
46
61
return (
47
62
< Modal
@@ -65,7 +80,7 @@ export const PremiumContentPurchaseModal = () => {
65
80
{ track ? (
66
81
< ModalContentPages currentPage = { currentStep } >
67
82
< LoadingPage />
68
- < PurchaseDetailsPage track = { track } />
83
+ < PurchaseDetailsPage track = { track } currentBalance = { balance } />
69
84
</ ModalContentPages >
70
85
) : null }
71
86
</ Modal >
0 commit comments