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

72 lines
2.6 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 = ({ isBnb, isHcc, isUsdt }) => {
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 (
(isHcc && getBalanceNumber(hccTokenBalance) === hccAmount) ||
(isUsdt && getBalanceNumber(usdtTokenBalance) === usdtAmount)
) {
toastWarning(t('Insufficient Balance'))
}
},
[isBnb, isHcc, isUsdt],
)
return [onCheck]
}
export const useBuyTransaction = () => {
const referralContract = useReferralchef()
const transaction = async () => {
const data = await getBuyReferralParams()
const { address, hccPrice, otherPaymentPirce, code, timestamp, sign } = data
const params = [address, hccPrice, otherPaymentPirce, code, timestamp, sign]
// const price = getDecimalAmountNumber(receive)
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