feat: 修改请求
This commit is contained in:
parent
bd09158250
commit
091d628025
|
|
@ -1053,15 +1053,10 @@
|
|||
"Community Auctions": "Community Auctions",
|
||||
"FAQs": "FAQs",
|
||||
"Auction duration": "Auction duration",
|
||||
"Terms & Conditions": "Terms & Conditions",
|
||||
|
||||
|
||||
|
||||
|
||||
"Hcc Info": "HighCityCoin",
|
||||
"Hcc Nft": "其作用主要是在HighCitySwap上购买NFT、NFT盒子与其他可交易产品。",
|
||||
"Hcc BTC": "同时,HCC与BTC、ETH具有相同属性,可以进行自由交易。",
|
||||
"Bazaar":"NFT市场"
|
||||
|
||||
|
||||
"Bazaar": "NFT市场",
|
||||
"Insufficient Balance": "余额不足"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1055,8 +1055,6 @@
|
|||
"Auction duration": "Auction duration",
|
||||
"Terms & Conditions": "Terms & Conditions",
|
||||
|
||||
|
||||
|
||||
"Hcc Info": "HighCityCoin简称HCC,由HighCityTM铸造,",
|
||||
"Hcc Nft": "其作用主要是在HighCitySwap上购买NFT、NFT盒子与其他可交易产品。",
|
||||
"Hcc BTC": "同时,HCC与BTC、ETH具有相同属性,可以进行自由交易。",
|
||||
|
|
@ -1120,5 +1118,6 @@
|
|||
"By using the invitation at the top right of the page, new users can be invited to enter and obtained after users purchase coins": "使用页面右上方的邀请,可邀请新用户进入,并在用户购买币后获得",
|
||||
"The commission": "的提成!",
|
||||
"market value": "市值",
|
||||
"Loaded all":"已加载全部"
|
||||
"Loaded all": "已加载全部",
|
||||
"Insufficient Balance": "余额不足"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,33 @@
|
|||
import request from 'utils/request'
|
||||
|
||||
export const getReferralInfo = () => {
|
||||
export const getReferralRewardInfo = () => {
|
||||
return request.request({
|
||||
url: '/high_city/app/api/invite/reward',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export const withdrawReward = () => {
|
||||
export const getReferralConfigInfo = () => {
|
||||
return request.request({
|
||||
url: '/high_city/app/api/invite/config',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export const getBuyReferralParams = () => {
|
||||
return request.request({
|
||||
url: '/high_city/app/api/invite/commander/purchase',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export const getWithdrawRewardParams = () => {
|
||||
return request.request({
|
||||
url: '/high_city/app/api/invite/reward/receive',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
export const checkWithdrawResult = (params) => {
|
||||
export const checkBuyResult = (params) => {
|
||||
return request.request({
|
||||
url: '/high_city/app/api/invite/commander/tx',
|
||||
method: 'post',
|
||||
|
|
@ -28,4 +42,4 @@ export const inviteReceive = () => {
|
|||
})
|
||||
}
|
||||
|
||||
export default getReferralInfo
|
||||
export default getReferralRewardInfo
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { createSlice } from '@reduxjs/toolkit'
|
||||
import { getReferralInfo } from 'services/referral'
|
||||
import { ReferralInfo, ReferralConfigType } from 'types/referral'
|
||||
import { getReferralRewardInfo, getReferralConfigInfo } from 'services/referral'
|
||||
import { ReferralInfo, ReferralConfigType, ReferralConfigInfo } from 'types/referral'
|
||||
import BigNumber from 'bignumber.js'
|
||||
import erc20ABI from 'config/abi/erc20.json'
|
||||
import multicall from 'utils/multicall'
|
||||
|
|
@ -16,7 +16,6 @@ const initialState: ReferralState = {
|
|||
}
|
||||
const payWayList = {
|
||||
usdt: tokens.usdt,
|
||||
// bnb: tokens.bnb,
|
||||
hcc: tokens.hcc,
|
||||
}
|
||||
export const referralSlice = createSlice({
|
||||
|
|
@ -40,13 +39,14 @@ export const fetchReferralInfoAsync = (account) => async (dispatch) => {
|
|||
dispatch(setReferralInfo({}))
|
||||
return
|
||||
}
|
||||
const data: ReferralInfo = await getReferralInfo()
|
||||
const data: ReferralInfo = await getReferralRewardInfo()
|
||||
const configInfo: ReferralConfigInfo[] = await getReferralConfigInfo()
|
||||
dispatch(
|
||||
setReferralInfo({
|
||||
commanderConfigInfo: data.inviteConfigList?.find((item) => item.type === ReferralConfigType.COMMANDER),
|
||||
normalConfigInfo: data.inviteConfigList?.find((item) => item.type === ReferralConfigType.NORMAL),
|
||||
commanderConfigInfo: configInfo?.find((item) => item.type === ReferralConfigType.COMMANDER),
|
||||
normalConfigInfo: configInfo?.find((item) => item.type === ReferralConfigType.NORMAL),
|
||||
isCommander: data.isCommander,
|
||||
rewardInfo: data.reward,
|
||||
rewardInfo: data.reward || {},
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
|
@ -62,7 +62,10 @@ export const fetchReferralUserAllowances = async (account: string) => {
|
|||
const parsedLpAllowances = rawLpAllowances.map((balance) => {
|
||||
return new BigNumber(balance).toNumber()
|
||||
})
|
||||
return parsedLpAllowances
|
||||
return {
|
||||
usdt: parsedLpAllowances[0],
|
||||
hcc: parsedLpAllowances[1],
|
||||
}
|
||||
}
|
||||
|
||||
export default referralSlice.reducer
|
||||
|
|
|
|||
|
|
@ -0,0 +1,109 @@
|
|||
import React, { useState, useEffect } from 'react'
|
||||
import { Flex, Button, Modal, Image } from '@pancakeswap/uikit'
|
||||
import styled from 'styled-components'
|
||||
import { useTranslation } from 'contexts/Localization'
|
||||
import { useAccount } from 'state/userInfo/hooks'
|
||||
import { fetchReferralUserAllowances } from 'state/referral'
|
||||
import { useERC20 } from 'hooks/useContract'
|
||||
import { getAddress } from 'utils/addressHelpers'
|
||||
import useToast from 'hooks/useToast'
|
||||
import { checkBuyResult } from 'services/referral'
|
||||
import useRefresh from 'hooks/useRefresh'
|
||||
import tokens from 'config/constants/tokens'
|
||||
import { useCheckTokenBalance, useApproveReferral, useBuyTransaction } from '../hooks'
|
||||
|
||||
// interface BuyActionsProps {
|
||||
|
||||
// }
|
||||
|
||||
const Btn = styled(Button)`
|
||||
width: 50%;
|
||||
margin: 20px auto 0px auto;
|
||||
border-radius: 50px;
|
||||
background: linear-gradient(180deg, #7be0fc 0%, #ac7bf1 100%);
|
||||
border: none;
|
||||
`
|
||||
const BuyActions: React.FC = () => {
|
||||
const { t } = useTranslation()
|
||||
const account = useAccount()
|
||||
const [allowanceList, setAllowanceList] = useState({ usdt: 0, hcc: 0 })
|
||||
const usdtContract = useERC20(getAddress(tokens.usdt.address))
|
||||
const [loading, setLoading] = useState(false)
|
||||
const [txId, setTxId] = useState()
|
||||
const { toastSuccess } = useToast()
|
||||
const { fastRefresh } = useRefresh()
|
||||
const hccContract = useERC20(getAddress(tokens.hcc.address))
|
||||
const { onApprove: onUsdtApprove } = useApproveReferral(usdtContract)
|
||||
const { onApprove: onHccApprove } = useApproveReferral(hccContract)
|
||||
const buyTransaction = useBuyTransaction()
|
||||
const handleApprove = async (approve) => {
|
||||
try {
|
||||
setLoading(true)
|
||||
await approve()
|
||||
setLoading(false)
|
||||
getAllowances()
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
}
|
||||
const getAllowances = async () => {
|
||||
const allowances = await fetchReferralUserAllowances(account)
|
||||
setAllowanceList({
|
||||
usdt: allowances.usdt,
|
||||
hcc: allowances.hcc,
|
||||
})
|
||||
}
|
||||
const handleBuy = async () => {
|
||||
await buyTransaction()
|
||||
}
|
||||
const getTransactionResult = async () => {
|
||||
const res = await checkBuyResult({ tx: txId })
|
||||
if (res?.success) {
|
||||
setLoading(false)
|
||||
setTxId(undefined)
|
||||
toastSuccess('Buy Success')
|
||||
}
|
||||
}
|
||||
useEffect(() => {
|
||||
if (txId && loading) {
|
||||
getTransactionResult()
|
||||
}
|
||||
}, [fastRefresh])
|
||||
|
||||
useEffect(() => {
|
||||
if (account) {
|
||||
getAllowances()
|
||||
} else {
|
||||
setAllowanceList({ usdt: 0, hcc: 0 })
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<Flex>
|
||||
{!allowanceList.usdt && (
|
||||
<Btn
|
||||
disabled={loading}
|
||||
onClick={() => {
|
||||
handleApprove(onUsdtApprove)
|
||||
}}
|
||||
>
|
||||
{t('Approve %coin% Contract', { coin: 'usdt' })}
|
||||
</Btn>
|
||||
)}
|
||||
|
||||
{!allowanceList.hcc && (
|
||||
<Btn
|
||||
disabled={loading}
|
||||
onClick={() => {
|
||||
handleApprove(onHccApprove)
|
||||
}}
|
||||
>
|
||||
{t('Approve %coin% Contract', { coin: 'hcc' })}
|
||||
</Btn>
|
||||
)}
|
||||
{allowanceList?.usdt && allowanceList.hcc ? <Btn onClick={handleBuy}>{t('Buy It Now')}</Btn> : null}
|
||||
</Flex>
|
||||
)
|
||||
}
|
||||
|
||||
export default BuyActions
|
||||
|
|
@ -3,6 +3,7 @@ import styled from 'styled-components'
|
|||
import { useTranslation } from 'contexts/Localization'
|
||||
import { useReferralNormalConfigInfo, useReferralCommanderConfigInfo } from 'state/referral/hooks'
|
||||
import { Flex, Button, Modal, Image } from '@pancakeswap/uikit'
|
||||
import BuyActions from './BuyActions'
|
||||
import TextFlex from './TextFlex'
|
||||
import FlexCom from './FlexCom'
|
||||
|
||||
|
|
@ -27,13 +28,7 @@ const InfoDiv = styled.div`
|
|||
margin-left: 60px;
|
||||
}
|
||||
`
|
||||
const UpBtn = styled(Button)`
|
||||
width: 50%;
|
||||
margin: 20px auto 0px auto;
|
||||
border-radius: 50px;
|
||||
background: linear-gradient(180deg, #7be0fc 0%, #ac7bf1 100%);
|
||||
border: none;
|
||||
`
|
||||
|
||||
const ImageDiv = styled(Image)`
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
|
|
@ -77,10 +72,10 @@ const BuyNftModal: React.FC = () => {
|
|||
<FlexCom name={t('Assets and chain')} value={t('Assets and chain')} />
|
||||
</InfoDiv>
|
||||
</Flex>
|
||||
|
||||
<Flex>
|
||||
<BuyActions />
|
||||
{/* <Flex>
|
||||
<UpBtn>{t('Buy It Now')}</UpBtn>
|
||||
</Flex>
|
||||
</Flex> */}
|
||||
</ModalDiv>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,9 +55,7 @@ const ConnectedCom: React.FC = () => {
|
|||
const { t } = useTranslation()
|
||||
const [onBuyModal] = useModal(<BuyNftModal />)
|
||||
const referralNormalConfigInfo = useReferralNormalConfigInfo()
|
||||
console.log('referralNormalConfigInfo:', referralNormalConfigInfo)
|
||||
const referralRewardInfo = useReferralRewardInfo()
|
||||
console.log('referralRewardInfo:', referralRewardInfo)
|
||||
const referralCommanderConfigInfo = useReferralCommanderConfigInfo()
|
||||
const getInviteReceive = async () => {
|
||||
await inviteReceive()
|
||||
|
|
|
|||
|
|
@ -1,39 +1,41 @@
|
|||
import { useState, useCallback } from 'react'
|
||||
import { useReferralchef, useReferralRewardchef } from 'hooks/useContract'
|
||||
import useTokenBalance, { useGetBnbBalance } from 'hooks/useTokenBalance'
|
||||
import { getAddress } from 'utils/addressHelpers'
|
||||
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 { withdrawReward } from 'services/referral'
|
||||
import { getWithdrawRewardParams, getBuyReferralParams } from 'services/referral'
|
||||
|
||||
const useCheckTokenBalance = ({ isBnb, isHcc, isUsdt }) => {
|
||||
const { balance: bnbTokenBalance } = useGetBnbBalance()
|
||||
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(() => {
|
||||
const onCheck = useCallback(
|
||||
(hccAmount, usdtAmount) => {
|
||||
if (
|
||||
(isBnb && getBalanceNumber(bnbTokenBalance) === 0) ||
|
||||
(isHcc && getBalanceNumber(hccTokenBalance) === 0) ||
|
||||
(isUsdt && getBalanceNumber(usdtTokenBalance) === 0)
|
||||
(isHcc && getBalanceNumber(hccTokenBalance) === hccAmount) ||
|
||||
(isUsdt && getBalanceNumber(usdtTokenBalance) === usdtAmount)
|
||||
) {
|
||||
toastWarning(t('Insufficient Balance'))
|
||||
}
|
||||
}, [isBnb, isHcc, isUsdt])
|
||||
},
|
||||
[isBnb, isHcc, isUsdt],
|
||||
)
|
||||
return [onCheck]
|
||||
}
|
||||
|
||||
export const useBuyTransaction = () => {
|
||||
const referralContract = useReferralchef()
|
||||
const transaction = async () => {
|
||||
const data = await withdrawReward()
|
||||
const { address, receive, timestamp, sign } = data
|
||||
const params = [address, receive, timestamp, sign]
|
||||
const price = getDecimalAmountNumber(receive)
|
||||
const res = await referralContract.adminMint(...params, { value: price })
|
||||
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
|
||||
|
|
@ -42,7 +44,7 @@ export const useBuyTransaction = () => {
|
|||
export const useWithdraw = () => {
|
||||
const referralRewardContract = useReferralRewardchef()
|
||||
const transaction = async () => {
|
||||
const data = await withdrawReward()
|
||||
const data = await getWithdrawRewardParams()
|
||||
const { address, receive, timestamp, sign } = data
|
||||
const params = [address, receive, timestamp, sign]
|
||||
const price = getDecimalAmountNumber(receive)
|
||||
|
|
@ -52,4 +54,18 @@ export const useWithdraw = () => {
|
|||
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue