hiCity-nft/src/views/Referral/hooks/index.ts

70 lines
2.5 KiB
TypeScript

import { useState, useCallback } from 'react'
import { useReferralchef, useReferralRewardchef } from 'hooks/useContract'
import useTokenBalance from 'hooks/useTokenBalance'
import { getAddress, getReferralAddress } from 'utils/addressHelpers'
import tokensList from 'config/constants/tokens'
import useToast from 'hooks/useToast'
import { useTranslation } from 'contexts/Localization'
import { ethers, Contract } from 'ethers'
import { getBalanceNumber, getDecimalAmountNumber } from 'utils/formatBalance'
import { getWithdrawRewardParams, getBuyReferralParams } from 'services/referral'
export const useCheckTokenBalance = () => {
const { balance: usdtTokenBalance } = useTokenBalance(getAddress(tokensList.usdt.address))
const { balance: hccTokenBalance } = useTokenBalance(getAddress(tokensList.hcc.address))
const { toastWarning } = useToast()
const { t } = useTranslation()
const onCheck = useCallback(
(hccAmount, usdtAmount) => {
if (getBalanceNumber(hccTokenBalance) <= hccAmount || getBalanceNumber(usdtTokenBalance) <= usdtAmount) {
toastWarning(t('Insufficient Balance'))
return false
}
return true
},
[usdtTokenBalance, hccTokenBalance],
)
return [onCheck]
}
export const useBuyTransaction = () => {
const referralContract = useReferralchef()
const transaction = async () => {
const data = await getBuyReferralParams()
const { to, hccPrice, otherPaymentPrice, timestamp, code, sign } = data
const params = [to, hccPrice, otherPaymentPrice, timestamp, code, sign]
const res = await referralContract.mint(...params)
return res
}
return transaction
}
export const useWithdraw = () => {
const referralRewardContract = useReferralRewardchef()
const transaction = async () => {
const data = await getWithdrawRewardParams()
const { address, receive, timestamp, sign } = data
const params = [address, receive, timestamp, sign]
const price = getDecimalAmountNumber(receive)
const res = await referralRewardContract.withDrawReward(...params, { value: price })
return res
}
return transaction
}
export const useApproveReferral = (tokenContract: Contract) => {
const handleApprove = useCallback(async () => {
try {
const tx = await tokenContract.approve(getReferralAddress(), ethers.constants.MaxUint256)
const receipt = await tx.wait()
return receipt.status
} catch (e) {
return false
}
}, [tokenContract])
return { onApprove: handleApprove }
}
export default useCheckTokenBalance