@saberhq/sail
Version:
Account caching and batched loading for React-based Solana applications.
52 lines • 2.02 kB
JavaScript
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