UNPKG

@saberhq/sail

Version:

Account caching and batched loading for React-based Solana applications.

52 lines 2.02 kB
import { mapN } from "@saberhq/solana-contrib"; import { RAW_SOL, TokenAmount } from "@saberhq/token-utils"; import { useConnectedWallet, useConnectionContext, useSolana, } from "@saberhq/use-solana"; import { useCallback, useMemo } from "react"; import { useParsedAccountData } from "./parsers/useParsedAccountsData"; /** * Fetches the SOL balance of an account. * @returns */ export const useSOLBalance = (accountId) => { const { network } = useSolana(); const sol = RAW_SOL[network]; const parser = useCallback((data) => { return new TokenAmount(sol, data.accountInfo.lamports); }, [sol]); const { data } = useParsedAccountData(accountId, parser); return useMemo(() => mapN((data) => new TokenAmount(sol, data.accountInfo.lamports), data), [data, sol]); }; /** * Uses the data of the raw SOL account. * @deprecated use {@link useSOLBalance} instead * @returns */ export function useNativeAccount() { const wallet = useConnectedWallet(); const { network } = useConnectionContext(); const sol = RAW_SOL[network]; const parser = useCallback((data) => { return new TokenAmount(sol, data.accountInfo.lamports); }, [sol]); const { data } = useParsedAccountData(wallet === null || wallet === void 0 ? void 0 : wallet.publicKey, parser); const balance = data === null || data === void 0 ? void 0 : data.accountInfo.lamports; return useMemo(() => { if (data === null) { return { account: null, nativeBalance: new TokenAmount(sol, 0), }; } if (!data || wallet === null || balance === undefined) { return { account: data === null || data === void 0 ? void 0 : data.accountInfo, nativeBalance: undefined, }; } return { account: data.accountInfo, nativeBalance: data.accountInfo.data, }; }, [balance, data, sol, wallet]); } //# sourceMappingURL=native.js.map