feat: 修改请求

This commit is contained in:
gary 2022-04-27 01:10:31 +08:00
parent bd09158250
commit 091d628025
8 changed files with 249 additions and 120 deletions

View File

@ -1053,15 +1053,10 @@
"Community Auctions": "Community Auctions", "Community Auctions": "Community Auctions",
"FAQs": "FAQs", "FAQs": "FAQs",
"Auction duration": "Auction duration", "Auction duration": "Auction duration",
"Terms & Conditions": "Terms & Conditions",
"Hcc Info": "HighCityCoin", "Hcc Info": "HighCityCoin",
"Hcc Nft": "其作用主要是在HighCitySwap上购买NFT、NFT盒子与其他可交易产品。", "Hcc Nft": "其作用主要是在HighCitySwap上购买NFT、NFT盒子与其他可交易产品。",
"Hcc BTC": "同时HCC与BTC、ETH具有相同属性可以进行自由交易。", "Hcc BTC": "同时HCC与BTC、ETH具有相同属性可以进行自由交易。",
"Bazaar":"NFT市场" "Bazaar": "NFT市场",
"Insufficient Balance": "余额不足"
} }

View File

@ -1055,8 +1055,6 @@
"Auction duration": "Auction duration", "Auction duration": "Auction duration",
"Terms & Conditions": "Terms & Conditions", "Terms & Conditions": "Terms & Conditions",
"Hcc Info": "HighCityCoin简称HCC由HighCityTM铸造", "Hcc Info": "HighCityCoin简称HCC由HighCityTM铸造",
"Hcc Nft": "其作用主要是在HighCitySwap上购买NFT、NFT盒子与其他可交易产品。", "Hcc Nft": "其作用主要是在HighCitySwap上购买NFT、NFT盒子与其他可交易产品。",
"Hcc BTC": "同时HCC与BTC、ETH具有相同属性可以进行自由交易。", "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": "使用页面右上方的邀请,可邀请新用户进入,并在用户购买币后获得", "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": "的提成!", "The commission": "的提成!",
"market value": "市值", "market value": "市值",
"Loaded all":"已加载全部" "Loaded all": "已加载全部",
"Insufficient Balance": "余额不足"
} }

View File

@ -1,19 +1,33 @@
import request from 'utils/request' import request from 'utils/request'
export const getReferralInfo = () => { export const getReferralRewardInfo = () => {
return request.request({ return request.request({
url: '/high_city/app/api/invite/reward', url: '/high_city/app/api/invite/reward',
method: 'get', 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({ return request.request({
url: '/high_city/app/api/invite/reward/receive', url: '/high_city/app/api/invite/reward/receive',
method: 'get', method: 'get',
}) })
} }
export const checkWithdrawResult = (params) => { export const checkBuyResult = (params) => {
return request.request({ return request.request({
url: '/high_city/app/api/invite/commander/tx', url: '/high_city/app/api/invite/commander/tx',
method: 'post', method: 'post',
@ -28,4 +42,4 @@ export const inviteReceive = () => {
}) })
} }
export default getReferralInfo export default getReferralRewardInfo

View File

@ -1,6 +1,6 @@
import { createSlice } from '@reduxjs/toolkit' import { createSlice } from '@reduxjs/toolkit'
import { getReferralInfo } from 'services/referral' import { getReferralRewardInfo, getReferralConfigInfo } from 'services/referral'
import { ReferralInfo, ReferralConfigType } from 'types/referral' import { ReferralInfo, ReferralConfigType, ReferralConfigInfo } from 'types/referral'
import BigNumber from 'bignumber.js' import BigNumber from 'bignumber.js'
import erc20ABI from 'config/abi/erc20.json' import erc20ABI from 'config/abi/erc20.json'
import multicall from 'utils/multicall' import multicall from 'utils/multicall'
@ -16,7 +16,6 @@ const initialState: ReferralState = {
} }
const payWayList = { const payWayList = {
usdt: tokens.usdt, usdt: tokens.usdt,
// bnb: tokens.bnb,
hcc: tokens.hcc, hcc: tokens.hcc,
} }
export const referralSlice = createSlice({ export const referralSlice = createSlice({
@ -40,13 +39,14 @@ export const fetchReferralInfoAsync = (account) => async (dispatch) => {
dispatch(setReferralInfo({})) dispatch(setReferralInfo({}))
return return
} }
const data: ReferralInfo = await getReferralInfo() const data: ReferralInfo = await getReferralRewardInfo()
const configInfo: ReferralConfigInfo[] = await getReferralConfigInfo()
dispatch( dispatch(
setReferralInfo({ setReferralInfo({
commanderConfigInfo: data.inviteConfigList?.find((item) => item.type === ReferralConfigType.COMMANDER), commanderConfigInfo: configInfo?.find((item) => item.type === ReferralConfigType.COMMANDER),
normalConfigInfo: data.inviteConfigList?.find((item) => item.type === ReferralConfigType.NORMAL), normalConfigInfo: configInfo?.find((item) => item.type === ReferralConfigType.NORMAL),
isCommander: data.isCommander, isCommander: data.isCommander,
rewardInfo: data.reward, rewardInfo: data.reward || {},
}), }),
) )
} }
@ -62,7 +62,10 @@ export const fetchReferralUserAllowances = async (account: string) => {
const parsedLpAllowances = rawLpAllowances.map((balance) => { const parsedLpAllowances = rawLpAllowances.map((balance) => {
return new BigNumber(balance).toNumber() return new BigNumber(balance).toNumber()
}) })
return parsedLpAllowances return {
usdt: parsedLpAllowances[0],
hcc: parsedLpAllowances[1],
}
} }
export default referralSlice.reducer export default referralSlice.reducer

View File

@ -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

View File

@ -3,6 +3,7 @@ import styled from 'styled-components'
import { useTranslation } from 'contexts/Localization' import { useTranslation } from 'contexts/Localization'
import { useReferralNormalConfigInfo, useReferralCommanderConfigInfo } from 'state/referral/hooks' import { useReferralNormalConfigInfo, useReferralCommanderConfigInfo } from 'state/referral/hooks'
import { Flex, Button, Modal, Image } from '@pancakeswap/uikit' import { Flex, Button, Modal, Image } from '@pancakeswap/uikit'
import BuyActions from './BuyActions'
import TextFlex from './TextFlex' import TextFlex from './TextFlex'
import FlexCom from './FlexCom' import FlexCom from './FlexCom'
@ -27,13 +28,7 @@ const InfoDiv = styled.div`
margin-left: 60px; 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)` const ImageDiv = styled(Image)`
width: 300px; width: 300px;
height: 300px; height: 300px;
@ -77,10 +72,10 @@ const BuyNftModal: React.FC = () => {
<FlexCom name={t('Assets and chain')} value={t('Assets and chain')} /> <FlexCom name={t('Assets and chain')} value={t('Assets and chain')} />
</InfoDiv> </InfoDiv>
</Flex> </Flex>
<BuyActions />
<Flex> {/* <Flex>
<UpBtn>{t('Buy It Now')}</UpBtn> <UpBtn>{t('Buy It Now')}</UpBtn>
</Flex> </Flex> */}
</ModalDiv> </ModalDiv>
) )
} }

View File

@ -55,9 +55,7 @@ const ConnectedCom: React.FC = () => {
const { t } = useTranslation() const { t } = useTranslation()
const [onBuyModal] = useModal(<BuyNftModal />) const [onBuyModal] = useModal(<BuyNftModal />)
const referralNormalConfigInfo = useReferralNormalConfigInfo() const referralNormalConfigInfo = useReferralNormalConfigInfo()
console.log('referralNormalConfigInfo:', referralNormalConfigInfo)
const referralRewardInfo = useReferralRewardInfo() const referralRewardInfo = useReferralRewardInfo()
console.log('referralRewardInfo:', referralRewardInfo)
const referralCommanderConfigInfo = useReferralCommanderConfigInfo() const referralCommanderConfigInfo = useReferralCommanderConfigInfo()
const getInviteReceive = async () => { const getInviteReceive = async () => {
await inviteReceive() await inviteReceive()

View File

@ -1,39 +1,41 @@
import { useState, useCallback } from 'react' import { useState, useCallback } from 'react'
import { useReferralchef, useReferralRewardchef } from 'hooks/useContract' import { useReferralchef, useReferralRewardchef } from 'hooks/useContract'
import useTokenBalance, { useGetBnbBalance } from 'hooks/useTokenBalance' import useTokenBalance from 'hooks/useTokenBalance'
import { getAddress } from 'utils/addressHelpers' import { getAddress, getReferralAddress } from 'utils/addressHelpers'
import tokensList from 'config/constants/tokens' import tokensList from 'config/constants/tokens'
import useToast from 'hooks/useToast' import useToast from 'hooks/useToast'
import { useTranslation } from 'contexts/Localization' import { useTranslation } from 'contexts/Localization'
import { ethers, Contract } from 'ethers'
import { getBalanceNumber, getDecimalAmountNumber } from 'utils/formatBalance' import { getBalanceNumber, getDecimalAmountNumber } from 'utils/formatBalance'
import { withdrawReward } from 'services/referral' import { getWithdrawRewardParams, getBuyReferralParams } from 'services/referral'
const useCheckTokenBalance = ({ isBnb, isHcc, isUsdt }) => { export const useCheckTokenBalance = ({ isBnb, isHcc, isUsdt }) => {
const { balance: bnbTokenBalance } = useGetBnbBalance()
const { balance: usdtTokenBalance } = useTokenBalance(getAddress(tokensList.usdt.address)) const { balance: usdtTokenBalance } = useTokenBalance(getAddress(tokensList.usdt.address))
const { balance: hccTokenBalance } = useTokenBalance(getAddress(tokensList.hcc.address)) const { balance: hccTokenBalance } = useTokenBalance(getAddress(tokensList.hcc.address))
const { toastWarning } = useToast() const { toastWarning } = useToast()
const { t } = useTranslation() const { t } = useTranslation()
const onCheck = useCallback(() => { const onCheck = useCallback(
(hccAmount, usdtAmount) => {
if ( if (
(isBnb && getBalanceNumber(bnbTokenBalance) === 0) || (isHcc && getBalanceNumber(hccTokenBalance) === hccAmount) ||
(isHcc && getBalanceNumber(hccTokenBalance) === 0) || (isUsdt && getBalanceNumber(usdtTokenBalance) === usdtAmount)
(isUsdt && getBalanceNumber(usdtTokenBalance) === 0)
) { ) {
toastWarning(t('Insufficient Balance')) toastWarning(t('Insufficient Balance'))
} }
}, [isBnb, isHcc, isUsdt]) },
[isBnb, isHcc, isUsdt],
)
return [onCheck] return [onCheck]
} }
export const useBuyTransaction = () => { export const useBuyTransaction = () => {
const referralContract = useReferralchef() const referralContract = useReferralchef()
const transaction = async () => { const transaction = async () => {
const data = await withdrawReward() const data = await getBuyReferralParams()
const { address, receive, timestamp, sign } = data const { address, hccPrice, otherPaymentPirce, code, timestamp, sign } = data
const params = [address, receive, timestamp, sign] const params = [address, hccPrice, otherPaymentPirce, code, timestamp, sign]
const price = getDecimalAmountNumber(receive) // const price = getDecimalAmountNumber(receive)
const res = await referralContract.adminMint(...params, { value: price }) const res = await referralContract.mint(...params)
return res return res
} }
return transaction return transaction
@ -42,7 +44,7 @@ export const useBuyTransaction = () => {
export const useWithdraw = () => { export const useWithdraw = () => {
const referralRewardContract = useReferralRewardchef() const referralRewardContract = useReferralRewardchef()
const transaction = async () => { const transaction = async () => {
const data = await withdrawReward() const data = await getWithdrawRewardParams()
const { address, receive, timestamp, sign } = data const { address, receive, timestamp, sign } = data
const params = [address, receive, timestamp, sign] const params = [address, receive, timestamp, sign]
const price = getDecimalAmountNumber(receive) const price = getDecimalAmountNumber(receive)
@ -52,4 +54,18 @@ export const useWithdraw = () => {
return transaction 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 export default useCheckTokenBalance