diff --git a/src/services/referral.ts b/src/services/referral.ts index b4765c5..4ff6fac 100644 --- a/src/services/referral.ts +++ b/src/services/referral.ts @@ -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 diff --git a/src/state/referral/hooks.ts b/src/state/referral/hooks.ts new file mode 100644 index 0000000..2a761b3 --- /dev/null +++ b/src/state/referral/hooks.ts @@ -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) +} diff --git a/src/state/referral/index.ts b/src/state/referral/index.ts index 3a673a5..a3bba5c 100644 --- a/src/state/referral/index.ts +++ b/src/state/referral/index.ts @@ -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 diff --git a/src/state/types.ts b/src/state/types.ts index b1c4ecb..51373c6 100644 --- a/src/state/types.ts +++ b/src/state/types.ts @@ -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 = ThunkAction @@ -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 diff --git a/src/state/userInfo/index.ts b/src/state/userInfo/index.ts index 6a3496a..4316580 100644 --- a/src/state/userInfo/index.ts +++ b/src/state/userInfo/index.ts @@ -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/fetchUse return result }) -// export const fetchUserInviteInfo = createAsyncThunk('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 } - // }) }, }) diff --git a/src/types/referral.ts b/src/types/referral.ts new file mode 100644 index 0000000..bc3a522 --- /dev/null +++ b/src/types/referral.ts @@ -0,0 +1,20 @@ +export interface ReferralConfigInfo { + dividendFirst?: number + dividendSecond?: number + id?: number + properties?: Record + type?: string +} + +export interface ReferralRewardInfo { + inviteNum?: number + invitePurchase?: number + inviteReward?: number + inviteRewardReceive?: number +} + +export interface ReferralInfo { + inviteConfigList: ReferralConfigInfo + isCommander: boolean + reward: ReferralRewardInfo +} diff --git a/src/types/user.ts b/src/types/user.ts index 0f6a38e..85fdf91 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -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 } diff --git a/src/views/Referral/components/UnunitedCom.tsx b/src/views/Referral/components/UnunitedCom.tsx index f697364..2961506 100644 --- a/src/views/Referral/components/UnunitedCom.tsx +++ b/src/views/Referral/components/UnunitedCom.tsx @@ -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 = () => { {t('recommend')} - {t('Connect the purse')} + {t('each time')} {t('last bid')} diff --git a/src/views/Referral/index.tsx b/src/views/Referral/index.tsx index c833535..ad01b90 100644 --- a/src/views/Referral/index.tsx +++ b/src/views/Referral/index.tsx @@ -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 ( - {type ? : {status ? : }} + {type ? : {account ? : }} ) }