Skip to content

Commit

Permalink
Sort token list update
Browse files Browse the repository at this point in the history
  • Loading branch information
thiagoulloa committed Nov 15, 2024
1 parent 64d20a4 commit 71ef917
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 30 deletions.
48 changes: 29 additions & 19 deletions src/components/SearchModal/CurrencyList/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -107,30 +107,17 @@ export function CurrencyRow({
otherSelected,
style,
showCurrencyAmount,
balance,
}: {
currency: TokenType;
onSelect: (hasWarning: boolean) => void;
isSelected: boolean;
otherSelected: boolean;
showCurrencyAmount?: boolean;
balance: number;
eventProperties: Record<string, unknown>;
style?: CSSProperties;
}) {
const sorobanContext = useSorobanReact();

const { address } = sorobanContext;

const { tokenBalancesResponse } = useGetMyBalances();

const { account } = useHorizonLoadAccount();

const { data, isLoading } = useSWRImmutable(
sorobanContext.activeChain && sorobanContext.address && account
? ['currencyBalance', tokenBalancesResponse, currency, sorobanContext, account]
: null,
([_, tokenBalancesResponse, currency, sorobanContext, account]) =>
getCurrencyBalance(tokenBalancesResponse, currency, sorobanContext, account),
);
const shortenSorobanClassicAsset = (currency: TokenType) => {
if (!currency) return '';
if (currency?.name && currency.name.toString().length > 56) {
Expand Down Expand Up @@ -186,7 +173,7 @@ export function CurrencyRow({
</AutoColumn>
{showCurrencyAmount ? (
<RowFixed style={{ justifySelf: 'flex-end' }}>
{isLoading ? <Loader /> : address ? <Balance balance={data || '0'} /> : null}
{<Balance balance={balance.toString() || '0'} />} {/* Usando o saldo diretamente */}
{isSelected && <CheckIcon />}
</RowFixed>
) : (
Expand Down Expand Up @@ -258,13 +245,35 @@ export default function CurrencyList({
isAddressSearch: string | false;
isLoading?: boolean;
}) {
const sorobanContext = useSorobanReact();

const { tokenBalancesResponse } = useGetMyBalances();

const { account } = useHorizonLoadAccount();

const itemData: TokenType[] = useMemo(() => {
if (otherListTokens && otherListTokens?.length > 0) {
return [...currencies, ...otherListTokens];
}
return currencies;
}, [currencies, otherListTokens]);

const enhancedItemData = itemData.map((currency) => {
const { data: balance, error } = useSWRImmutable(
sorobanContext.activeChain && sorobanContext.address && account
? ['currencyBalance', tokenBalancesResponse, currency, sorobanContext, account]
: null,
([_, tokenBalancesResponse, currency, sorobanContext, account]) =>
getCurrencyBalance(tokenBalancesResponse, currency, sorobanContext, account),
);
return {
...currency,
balance: Number(balance ?? 0),
};
});

const sortedItemData = enhancedItemData.sort((a, b) => b.balance - a.balance);

const Row = useCallback(
function TokenRow({ data, index, style }: TokenRowProps) {
const row: TokenType = data[index];
Expand All @@ -286,6 +295,7 @@ export default function CurrencyList({
return (
<CurrencyRow
style={style}
balance={row.balance}
currency={currency}
isSelected={isSelected}
onSelect={handleSelect}
Expand Down Expand Up @@ -314,7 +324,7 @@ export default function CurrencyList({
],
);

const itemKey = useCallback((index: number, data: typeof itemData) => {
const itemKey = useCallback((index: number, data: typeof sortedItemData) => {
const currency = data[index];
return currencyKey(currency);
}, []);
Expand All @@ -330,8 +340,8 @@ export default function CurrencyList({
height={height}
ref={fixedListRef as any}
width="100%"
itemData={itemData}
itemCount={itemData.length}
itemData={sortedItemData}
itemCount={sortedItemData.length}
itemSize={56}
itemKey={itemKey}
>
Expand Down
27 changes: 16 additions & 11 deletions src/hooks/tokens/useToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ export const findToken = async (
if (!tokenAddress || tokenAddress === '') return undefined;

const classicAssetSearch = getClassicAssetSorobanAddress(tokenAddress!, sorobanContext);

const formattedAddress = isAddress(classicAssetSearch ? classicAssetSearch : tokenAddress);
if (!formattedAddress) return undefined;

const fromMap = tokensAsMap[formattedAddress];

if (fromMap) return fromMap;

const token = await getToken(sorobanContext, formattedAddress);
// const token: TokenType = {
// contract: formattedAddress,
Expand All @@ -33,7 +33,7 @@ export const findToken = async (
// decimals,
// icon: logo,
// };

if (!token?.name || !token?.code) return undefined;
// Here from token.name we will try to understand if this is a classic asset (even if we got a soroban contracta as address).
const stellarAsset = getClassicStellarAsset(token.name);
Expand All @@ -44,17 +44,17 @@ export const findToken = async (
*/
if (stellarAsset && typeof stellarAsset !== 'boolean') {
return {
balance: 0,
issuer: stellarAsset.issuer,
contract: token.contract,
name: stellarAsset.asset,
code: stellarAsset.assetCode,
decimals: 7,
icon: '',
};
} else {
return token;
}
else {
return token
};
};

const revalidateKeysCondition = (key: any) => {
Expand Down Expand Up @@ -96,8 +96,12 @@ export function useToken(tokenAddress: string | undefined) {
const bothLoading = isLoading || isStellarClassicAssetLoading;

const needsWrapping = !data && isStellarClassicAsset;

const checkContractId = (contractId: string, code: string, issuer: string): boolean | undefined => {

const checkContractId = (
contractId: string,
code: string,
issuer: string,
): boolean | undefined => {
if (!issuer) {
return undefined;
}
Expand All @@ -107,7 +111,7 @@ export function useToken(tokenAddress: string | undefined) {
} else {
return false;
}
}
};
const isSafe = data ? checkContractId(data.contract, data.code, data.issuer!) : false;

const needsWrappingOnAddLiquidity = (!data && isStellarClassicAsset) || !name;
Expand All @@ -120,6 +124,7 @@ export function useToken(tokenAddress: string | undefined) {
if (sorobanAddress || (stellarAsset && typeof sorobanAddress === 'string')) {
if (stellarAsset && typeof stellarAsset !== 'boolean') {
newTokenData = {
balance: 0,
issuer: stellarAsset.issuer,
contract: sorobanAddress,
name: stellarAsset.asset,
Expand Down
1 change: 1 addition & 0 deletions src/hooks/tokens/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ export async function getToken(
logo = await getTokenLogo(formattedAddress, sorobanContext);

const token: TokenType = {
balance: 0,
contract: formattedAddress,
name: name as string,
code: symbol as string,
Expand Down
1 change: 1 addition & 0 deletions src/interfaces/tokens.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export interface TokenType {
balance: number;
code: string;
issuer?: string;
contract: string;
Expand Down

0 comments on commit 71ef917

Please sign in to comment.