@macalinao/grill
Version:
Modern Solana development kit for React applications with automatic account batching, caching, and transaction notifications
43 lines • 1.42 kB
JavaScript
import { createTokenAmount } from "@macalinao/token-utils";
import { TOKEN_PROGRAM_ADDRESS } from "@solana-program/token";
import { useMemo } from "react";
import { useAssociatedTokenAccount } from "./use-associated-token-account.js";
import { useTokenInfo } from "./use-token-info.js";
/**
* Hook that fetches an Associated Token Account balance as a TokenAmount.
* This combines useAssociatedTokenAccount and useTokenInfo to provide the complete balance information.
*
* @example
* ```typescript
* const balance = useATABalance({
* mint: mintAddress,
* owner: walletAddress,
* });
*
* if (balance) {
* console.log("Balance:", formatTokenAmount(balance));
* }
* ```
*/
export function useATABalance(options) {
const { mint, owner, tokenProgram = TOKEN_PROGRAM_ADDRESS } = options;
// Fetch the ATA and its data
const { data: ataAccount } = useAssociatedTokenAccount({
mint,
owner,
tokenProgram,
});
// Fetch the token info
const { data: tokenInfo } = useTokenInfo({ mint });
return useMemo(() => {
if (!tokenInfo) {
return null;
}
// If ATA doesn't exist, return zero balance
if (!ataAccount) {
return createTokenAmount(tokenInfo, 0n);
}
return createTokenAmount(tokenInfo, ataAccount.data.amount);
}, [ataAccount, tokenInfo]);
}
//# sourceMappingURL=use-ata-balance.js.map