feat: 修改军团长

This commit is contained in:
gary 2022-04-24 10:35:26 +08:00
parent e3b2433d23
commit 4105fed6e2
9 changed files with 87 additions and 111 deletions

View File

@ -1,32 +1,10 @@
import request from 'utils/request'
export const setInviteCode = (data) => {
export const getReferralInfo = () => {
return request.request({
url: '/api/v1/setInviteCode',
method: 'post',
data,
url: '/high_city/app/api/invite/reward',
method: 'get',
})
}
export const getAddressInviteInfo = (data) => {
return request.request({
url: '/api/v1/getAddressInviteInfo',
method: 'post',
data,
})
}
export const getAddressInviteList = (data) => {
return request.request({
url: '/api/v1/getAddressInviteList',
method: 'post',
data,
})
}
export const getAddressOtherReward = (data) => {
return request.request({
url: '/api/v1/getAddressOtherReward',
method: 'post',
data,
})
}
export default getReferralInfo

View File

@ -0,0 +1,14 @@
import { useSelector } from 'react-redux'
import { State } from '../types'
export const useReferralConfigInfo = () => {
return useSelector((state: State) => state.referral.configInfo)
}
export const useReferralRewardInfo = () => {
return useSelector((state: State) => state.referral.rewardInfo)
}
export const useReferralIsCommander = () => {
return useSelector((state: State) => state.referral.isCommander)
}

View File

@ -1,50 +1,37 @@
/* eslint-disable no-param-reassign */
import { createSlice } from '@reduxjs/toolkit'
import { getAddressInviteInfo, getAddressOtherReward } from 'services/referral'
import referralChefAbi from 'config/abi/referral.json'
import multicall from 'utils/multicall'
import BigNumber from 'bignumber.js'
import { getReferralAddress } from 'utils/addressHelpers'
import { getBalanceNumber } from 'utils/formatBalance'
import { Referral, ReferralState } from '../types'
import { getReferralInfo } from 'services/referral'
import { ReferralInfo } from 'types/referral'
import { ReferralState } from '../types'
const initialState: ReferralState = { data: {} }
const initialState: ReferralState = { configInfo: {}, isCommander: false, rewardInfo: {} }
export const referralSlice = createSlice({
name: 'Referral',
initialState,
reducers: {
setInfo: (state, action) => {
state.data = action.payload
setReferralInfo: (state, action) => {
state.configInfo = action.payload.configInfo
state.isCommander = action.payload.isCommander
state.rewardInfo = action.payload.rewardInfo
},
},
})
// Actions
export const { setInfo } = referralSlice.actions
export const { setReferralInfo } = referralSlice.actions
// Thunks
export const fetchReferralInfoAsync = (account) => async (dispatch) => {
if (!account) {
dispatch(setInfo({}))
dispatch(setReferralInfo({}))
return
}
const data: any = await getAddressInviteInfo({ address: account })
const otherReward = await getAddressOtherReward({ address: account })
const [totalReward, canWithdrawReward] = await multicall(referralChefAbi, [
{
address: getReferralAddress(),
name: 'inviteTotalRewardMap',
params: [account],
},
{
address: getReferralAddress(),
name: 'canGetRewardMap',
params: [account],
},
])
data.totalReward = getBalanceNumber(new BigNumber(totalReward), 18, 5)
data.canWithdrawReward = getBalanceNumber(new BigNumber(canWithdrawReward), 18, 5)
data.otherReward = otherReward
dispatch(setInfo(data))
const data: ReferralInfo = await getReferralInfo()
dispatch(
setReferralInfo({
configInfo: data.inviteConfigList[0],
isCommander: data.isCommander,
rewardInfo: data.reward,
}),
)
}
export default referralSlice.reducer

View File

@ -12,6 +12,8 @@ import {
Team,
BoardConfig,
} from 'config/constants/types'
import { UserInfo } from 'types/user'
import { ReferralConfigInfo, ReferralRewardInfo } from 'types/referral'
export type AppThunk<ReturnType = void> = ThunkAction<ReturnType, State, unknown, AnyAction>
@ -475,28 +477,16 @@ export interface UserRound {
export type UserTicketsResponse = [ethers.BigNumber[], number[], boolean[]]
export interface UserInfo {
id?: number
inviteCode?: string
name?: string
address?: string
}
export interface UserInfoState {
userInfo: UserInfo
token?: string
account?: string
}
export interface Referral {
Address?: string
ID?: number
InviteAddress?: string
InviteCode?: string
totalReward?: string
otherReward?: number // 其他特殊奖励
canWithdrawReward?: number
}
export interface ReferralState {
data: Referral
configInfo: ReferralConfigInfo
isCommander: boolean
rewardInfo: ReferralRewardInfo
}
export interface Boards extends BoardConfig {
tokenAmount?: number

View File

@ -1,11 +1,8 @@
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'
import { queryUserInfo } from 'services/user'
import { CACHE_TOKEN, CACHE_ACCOUNT, CACHE_USERINFO } from 'config/constants/cacheKey'
import multicall from 'utils/multicall'
// import inviteAbi from 'config/abi/invite.json'
// import { getInviteAddress } from 'utils/addressHelpers'
import { getBalanceNumber } from 'utils/formatBalance'
import { UserInfoState, UserInfo } from '../types'
import { UserInfo } from 'types/user'
import { UserInfoState } from '../types'
const initialState: UserInfoState = {
userInfo: {},
@ -18,17 +15,6 @@ export const fetchUserInfo = createAsyncThunk<UserInfo, null>('userInfo/fetchUse
return result
})
// export const fetchUserInviteInfo = createAsyncThunk<number, string>('userInfo/fetchUserInviteInfo', async (account) => {
// const [canWithdrawReward] = await multicall(inviteAbi, [
// {
// address: getInviteAddress(),
// name: 'canGetRewardMap',
// params: [account],
// },
// ])
// return getBalanceNumber(canWithdrawReward)
// })
export const userInfoSlice = createSlice({
name: 'userInfo',
initialState,
@ -56,9 +42,6 @@ export const userInfoSlice = createSlice({
state.userInfo = action.payload
localStorage.setItem(CACHE_USERINFO, JSON.stringify(state.userInfo))
})
// .addCase(fetchUserInviteInfo.fulfilled, (state, action) => {
// state.userInfo = { ...state.userInfo, invite_reward: action.payload }
// })
},
})

20
src/types/referral.ts Normal file
View File

@ -0,0 +1,20 @@
export interface ReferralConfigInfo {
dividendFirst?: number
dividendSecond?: number
id?: number
properties?: Record<string, unknown>
type?: string
}
export interface ReferralRewardInfo {
inviteNum?: number
invitePurchase?: number
inviteReward?: number
inviteRewardReceive?: number
}
export interface ReferralInfo {
inviteConfigList: ReferralConfigInfo
isCommander: boolean
reward: ReferralRewardInfo
}

View File

@ -1,12 +1,6 @@
export interface ProtraitDetailType {
id?: string
url?: string
}
export interface InviteDetailType {
id: number
created_at: string
name: string
avatar: string
invite_num: number
export interface UserInfo {
id?: number
inviteCode?: string
name?: string
address?: string
}

View File

@ -1,17 +1,17 @@
import React from 'react'
import styled from 'styled-components'
import { useTranslation } from 'contexts/Localization'
import { Button, Heading, Text } from '@pancakeswap/uikit'
import { Heading, Text } from '@pancakeswap/uikit'
import UnlockButton from 'components/UnlockButton'
const HeadingDiv = styled(Heading)`
padding-top: 90px;
`
const ButtonDiv = styled(Button)`
const UnlockButtonDiv = styled(UnlockButton)`
width: 80%;
margin: 80px auto 10px auto;
margin-left: 10%;
border-radius: 50px;
`
const FooterDiv = styled.div`
width: 80%;
@ -30,7 +30,7 @@ const UnunitedCom: React.FC = () => {
<HeadingDiv scale="xl" mb="24px" textAlign="center">
{t('recommend')}
</HeadingDiv>
<ButtonDiv>{t('Connect the purse')}</ButtonDiv>
<UnlockButtonDiv />
<FooterDiv>
<TextDiv color="textSubtle">{t('each time')}</TextDiv>
<TextDiv color="textSubtle">{t('last bid')}</TextDiv>

View File

@ -1,5 +1,9 @@
import React, { useState } from 'react'
import React, { useState, useEffect } from 'react'
import styled from 'styled-components'
import { fetchReferralInfoAsync } from 'state/actions'
import { useAccount } from 'state/userInfo/hooks'
import { useReferralConfigInfo } from 'state/referral/hooks'
import { useDispatch } from 'react-redux'
import UnunitedCom from './components/UnunitedCom'
import ConnectedCom from './components/Connected'
import RegimentalCom from './components/Regimental'
@ -35,12 +39,18 @@ const ContentDiv = styled.div`
const Nft: React.FC = () => {
// 邀请false普通邀请 true军团长邀请
const [type, setType] = useState(false)
// 是否连接钱包
const [status, setStatus] = useState(true)
const dispatch = useDispatch()
const account = useAccount()
const referralConfigInfo = useReferralConfigInfo()
console.log(referralConfigInfo)
useEffect(() => {
dispatch(fetchReferralInfoAsync(account))
}, [account])
return (
<MainDiv>
{type ? <RegimentalCom /> : <ContentDiv>{status ? <ConnectedCom /> : <UnunitedCom />}</ContentDiv>}
{type ? <RegimentalCom /> : <ContentDiv>{account ? <ConnectedCom /> : <UnunitedCom />}</ContentDiv>}
</MainDiv>
)
}