Skip to content

Commit

Permalink
feat: manager token list
Browse files Browse the repository at this point in the history
  • Loading branch information
FrankFeng1116 committed Jan 26, 2025
1 parent 589b87d commit 2bb2412
Show file tree
Hide file tree
Showing 15 changed files with 229 additions and 57 deletions.
1 change: 0 additions & 1 deletion packages/api/api-did/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ export class DidService extends ServiceInit {
send = async (base: BaseConfig, config?: RequestConfig, reCount = 0): Promise<any> => {
try {
const result = await this.sendOrigin(base, config, reCount);
console.log('this.transformCallbackList.length', this.transformCallbackList.length);
if (this.transformCallbackList.length > 0) {
const i = this.transformCallbackList.reduce((prevResult, callback) => {
return callback(prevResult);
Expand Down
1 change: 1 addition & 0 deletions packages/api/api-eoa/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export class DidService extends ServiceInit {
...fetchConfig,
method,
});
console.log('sendOrigin====', JSON.stringify(fetchResult), URL);
return fetchResult;
};
setLockCallBack = (callBack: (expired?: boolean) => void) => {
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,22 @@ import { ChainId } from '@portkey-wallet/types';
import { useAppEOASelector } from '../index';
import { useCurrentNetworkInfo, useIsMainnet } from '../network';
import {
showLocalShowTokenInfo,
fetchNFTAsync,
fetchNFTCollectionsAsync,
fetchTokenListAsync,
INIT_ACCOUNT_NFT_INFO,
INIT_ACCOUNT_TOKEN_INFO,
hideLocalShowTokenInfo,
} from '@portkey-wallet/store/store-eoa/assets/slice';
import { useAppCommonDispatch } from '../..';
import { useCurrentAddressInfos, useUniqueIdentify } from '../wallet';
import {
ITokenSectionResponse,
IUserTokenItem,
IUserTokenItemResponse,
TokenItemShowType,
} from '@portkey-wallet/types/types-eoa/token';

export const useAssets = () => useAppEOASelector(state => state.assets);

Expand Down Expand Up @@ -97,6 +105,45 @@ export const useAccountTokenInfo = () => {
() => assetsState?.accountToken?.accountTokenInfoV2?.[identify] || INIT_ACCOUNT_TOKEN_INFO,
[assetsState?.accountToken?.accountTokenInfoV2, identify],
);
const updatedAccountTokenList = useMemo(() => {
const originAccountTokenList = accountTokenInfo.accountTokenList;
const localShowTokenInfo = assetsState.accountToken.localShowTokenInfo?.[identify];
const mergedTokens = localShowTokenInfo
?.filter(item => item.isAdded)
?.reduce((acc: ITokenSectionResponse[], token: IUserTokenItem) => {
const existingToken = acc.find(item => item.symbol === token.symbol);
if (existingToken) {
existingToken?.tokens?.push(token);
} else {
acc.push({
symbol: token.symbol,
price: Number(token.price) || 0,
balance: token.balance || '0',
decimals: Number(token.decimals) || 0,
balanceInUsd: token.balanceInUsd || '0',
// tokenContractAddress: '',
imageUrl: token.imageUrl,
label: token.label || '',
tokens: [token],
});
}
return acc;
}, []);
let updatedOriginAccountTokenList: ITokenSectionResponse[] = [];
if (originAccountTokenList) {
updatedOriginAccountTokenList = [...originAccountTokenList];
mergedTokens?.forEach(mergedToken => {
const existsInOrigin = updatedOriginAccountTokenList?.some(
originToken => originToken.symbol === mergedToken.symbol,
);
if (!existsInOrigin) {
updatedOriginAccountTokenList?.push(mergedToken);
}
});
}

return updatedOriginAccountTokenList.length > 0 ? updatedOriginAccountTokenList : mergedTokens;
}, [accountTokenInfo.accountTokenList, assetsState.accountToken.localShowTokenInfo, identify]);
const fetchAccountTokenInfoList = useCallback(
(params: {
addressInfos: { chainId: ChainId; address: string }[];
Expand All @@ -114,7 +161,12 @@ export const useAccountTokenInfo = () => {
[identify, dispatch],
);

return { ...accountTokenInfo, fetchAccountTokenInfoList, isFetching: assetsState?.accountToken?.isFetching };
return {
...accountTokenInfo,
accountTokenList: updatedAccountTokenList,
fetchAccountTokenInfoList,
isFetching: assetsState?.accountToken?.isFetching,
};
};
export const useAccountBalanceUSD = () => {
const identify = useUniqueIdentify();
Expand Down Expand Up @@ -197,3 +249,50 @@ export function useFetchTokenAllowanceList() {
// [addressInfos],
// );
}

export function useManagerTokenInfo() {
const dispatch = useAppCommonDispatch();
const identify = useUniqueIdentify();
const { accountToken } = useAssets();
console.log('accountToken===1233', accountToken);
const showToken = useCallback(
(token: IUserTokenItem) => {
dispatch(
showLocalShowTokenInfo({
identify,
token,
}),
);
},
[dispatch, identify],
);

const hideToken = useCallback(
(token: IUserTokenItem) => {
dispatch(
hideLocalShowTokenInfo({
identify,
token,
}),
);
},
[dispatch, identify],
);
const switchToken = useCallback(
(item: TokenItemShowType, isDisplay: boolean) => {
console.log('item is::', item, 'isDisplay', isDisplay);
if (isDisplay) {
showToken(item as IUserTokenItem);
} else {
hideToken(item as IUserTokenItem);
}
},
[hideToken, showToken],
);
return {
showToken,
hideToken,
switchToken,
localToken: accountToken?.localShowTokenInfo?.[identify],
};
}
50 changes: 46 additions & 4 deletions packages/hooks/hooks-eoa/useToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
} from '@portkey-wallet/store/store-eoa/tokenManagement/action';
import { useMemo, useCallback, useEffect } from 'react';
import { INITIAL_TOKEN_INFO } from '@portkey-wallet/store/store-eoa/tokenManagement/slice';
import { useAccountTokenInfo } from './assets';
import { useAccountTokenInfo, useAssets, useManagerTokenInfo } from './assets';
import { useUniqueIdentify } from './wallet';

export const useToken = () => {
Expand Down Expand Up @@ -36,14 +36,51 @@ export const useToken = () => {
export const useTokenLegacy = () => {
const dispatch = useAppCommonDispatch();
const identify = useUniqueIdentify();

console.log('identify is:: =====', identify);
const { accountTokenList } = useAccountTokenInfo();
const { localToken } = useManagerTokenInfo();
const tokenState = useAppEOASelector(state => state.tokenManagement);

const tokenInfo = useMemo(
() => tokenState?.tokenInfo?.[identify] || INITIAL_TOKEN_INFO,
[identify, tokenState?.tokenInfo],
);
const updatedTokenDataShowInMarket = useMemo(() => {
console.log('tokenInfo.tokenDataShowInMarket', JSON.stringify(tokenInfo.tokenDataShowInMarket));
const flattenedAccountTokens = accountTokenList?.flatMap(item => item.tokens);
console.log('flattenedAccountTokens====', JSON.stringify(flattenedAccountTokens));
console.log('localToken====', JSON.stringify(localToken));
// const flattenedLocalTokens = localToken?.flatMap(item => item.tokens);
const updatedMarketTokens = tokenInfo.tokenDataShowInMarket.map(token => ({
...token,
isAdded:
flattenedAccountTokens?.some(item1 => item1?.symbol === token.symbol && item1.chainId === token.chainId) ||
localToken?.some(item1 => item1?.symbol === token.symbol && item1.chainId === token.chainId && item1.isAdded),
}));

flattenedAccountTokens?.forEach(token => {
if (
token &&
!updatedMarketTokens.some(
marketToken => marketToken.symbol === token.symbol && marketToken.chainId === token.chainId,
)
) {
updatedMarketTokens.push({ ...token, isAdded: true });
}
});

localToken?.forEach(token => {
if (
!updatedMarketTokens.some(
marketToken => marketToken.symbol === token.symbol && marketToken.chainId === token.chainId,
)
) {
updatedMarketTokens.push({ ...token, isAdded: token.isAdded });
}
});

return updatedMarketTokens;
}, [accountTokenList, localToken, tokenInfo.tokenDataShowInMarket]);
const fetchTokenInfoList = useCallback(
(params: { keyword: string; chainIdArray: string[]; skipCount?: number; maxResultCount?: number }) => {
return dispatch(
Expand All @@ -55,8 +92,13 @@ export const useTokenLegacy = () => {
},
[identify, dispatch],
);

return { ...tokenInfo, fetchTokenInfoList, isFetching: tokenState.isFetching };
tokenInfo.tokenDataShowInMarket;
return {
...tokenInfo,
tokenDataShowInMarket: updatedTokenDataShowInMarket,
fetchTokenInfoList,
isFetching: tokenState.isFetching,
};
};
export const useFetchSymbolImages = () => {
const dispatch = useAppCommonDispatch();
Expand Down
2 changes: 0 additions & 2 deletions packages/mobile-aelf/js/pages/DashBoard/NFTSection/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,6 @@ export default function NFTSection() {
if (totalRecordCount && accountNFTList.length >= totalRecordCount && !isInit) {
return;
}
console.log('wfs====fetchAccountNFTCollectionInfoList2');
await fetchAccountNFTCollectionInfoList({
addressInfos,
skipCount: isInit ? 0 : accountNFTList.length,
Expand Down Expand Up @@ -179,7 +178,6 @@ export default function NFTSection() {
// setItemId(res.itemId);
// setImageUrl(res.imageUrl);
setOpenCollectionObj({});
console.log('wfs====fetchAccountNFTCollectionInfoList5');
getNFTCollectionsAsync(true);
}, REFRESH_TIME);
return () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ const CollectionDetail = () => {
}
return currentCollection;
}, [accountNFTList, chainId, symbol]);
console.log('currentCollectionObj', currentCollectionObj);
console.log('currentCollectionObj', JSON.stringify(currentCollectionObj));
const [realItemCount, setRealItemCount] = useState<number>(itemCount);
useEffect(() => {
if (currentCollectionObj?.totalRecordCount && currentCollectionObj?.totalRecordCount !== itemCount) {
Expand Down
51 changes: 15 additions & 36 deletions packages/mobile-aelf/js/pages/Token/ManageTokenList/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import PageContainer from 'components/PageContainer';
import { TokenItemShowType } from '@portkey-wallet/types/types-ca/token';
import { TokenItemShowType } from '@portkey-wallet/types/types-eoa/token';
import CommonInput from 'components/CommonInput';
import { View } from 'react-native';
import gStyles from 'assets/theme/GStyles';
Expand All @@ -8,23 +8,19 @@ import CommonToast from 'components/CommonToast';
import { useLanguage } from 'i18n/hooks';
import useDebounce from 'hooks/useDebounce';
import { useEffectOnce } from '@portkey-wallet/hooks';
import { request } from '@portkey-wallet/api/api-did';
import { useCaAddressInfoList, useChainIdList } from '@portkey-wallet/hooks/hooks-ca/wallet';
import { request } from '@portkey-wallet/api/api-eoa';
import { useChainIdList } from '@portkey-wallet/hooks/hooks-eoa/wallet';
import Loading from 'components/Loading';
import FilterTokenSection from '../components/FilterToken';
import PopularTokenSection from '../components/PopularToken';
import { pTd } from 'utils/unit';
import navigationService from 'utils/navigationService';
import Svg from 'components/Svg';
import Touchable from 'components/Touchable';
import {
PAGE_SIZE_DEFAULT,
PAGE_SIZE_IN_ACCOUNT_ASSETS,
PAGE_SIZE_IN_ACCOUNT_TOKEN,
} from '@portkey-wallet/constants/constants-ca/assets';
import { useTokenLegacy } from '@portkey-wallet/hooks/hooks-ca/useToken';
import { PAGE_SIZE_DEFAULT, PAGE_SIZE_IN_ACCOUNT_ASSETS } from '@portkey-wallet/constants/constants-eoa/assets';
import { useTokenLegacy } from '@portkey-wallet/hooks/hooks-eoa/useToken';
import useLockCallback from '@portkey-wallet/hooks/useLockCallback';
import { useAccountTokenInfo } from '@portkey-wallet/hooks/hooks-ca/assets';
import { useManagerTokenInfo } from '@portkey-wallet/hooks/hooks-eoa/assets';
import { makeStyles } from '@rneui/themed';

interface ManageTokenListProps {
Expand All @@ -36,10 +32,8 @@ const ManageTokenList: React.FC<ManageTokenListProps> = () => {

const [isSearch, setIsSearching] = useState<boolean>(false);
const { tokenDataShowInMarket, totalRecordCount, fetchTokenInfoList } = useTokenLegacy();
const { switchToken } = useManagerTokenInfo();
const chainIdArray = useChainIdList();
const caAddressInfos = useCaAddressInfoList();

const { fetchAccountTokenInfoList } = useAccountTokenInfo();

const [keyword, setKeyword] = useState<string>('');
const [filterTokenList, setFilterTokenList] = useState<TokenItemShowType[]>([]);
Expand Down Expand Up @@ -83,9 +77,11 @@ const ManageTokenList: React.FC<ManageTokenListProps> = () => {
maxResultCount: PAGE_SIZE_DEFAULT,
},
});
console.log('res====', JSON.stringify(res));
const _target = (res || []).map((item: any) => ({
...item,
isAdded: item.isDisplay,
isAdded:
tokenDataShowInMarket?.find(it => it.symbol === item.symbol && it.chainId === item.chainId)?.isAdded || false,
userTokenId: item.id,
}));
setFilterTokenList(_target);
Expand All @@ -95,39 +91,22 @@ const ManageTokenList: React.FC<ManageTokenListProps> = () => {
} finally {
setIsSearching(false);
}
}, [chainIdArray, debounceWord, keyword]);
}, [chainIdArray, debounceWord, keyword, tokenDataShowInMarket]);

const onSwitchTokenDisplay = useCallback(
async (item: TokenItemShowType, isDisplay: boolean) => {
Loading.showOnce();

try {
await request.token.displayUserToken({
resourceUrl: `${item.userTokenId}/display`,
params: {
isDisplay,
},
});
timerRef.current = setTimeout(async () => {
fetchAccountTokenInfoList({
caAddressInfos,
skipCount: 0,
maxResultCount: PAGE_SIZE_IN_ACCOUNT_TOKEN,
});

if (debounceWord) {
await searchToken();
} else {
await getTokenList(true);
}
Loading.hide();
}, 800);
switchToken(item, isDisplay);
} catch (err) {
Loading.hide();
CommonToast.failError(err);
} finally {
Loading.hide();
}
},
[caAddressInfos, debounceWord, fetchAccountTokenInfoList, getTokenList, searchToken],
[switchToken],
);

const onHandleToken = useCallback(
Expand Down
Loading

0 comments on commit 2bb2412

Please sign in to comment.