@saberhq/sail
Version:
Account caching and batched loading for React-based Solana applications.
57 lines • 2.45 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useNativeAccount = exports.useSOLBalance = void 0;
const solana_contrib_1 = require("@saberhq/solana-contrib");
const token_utils_1 = require("@saberhq/token-utils");
const use_solana_1 = require("@saberhq/use-solana");
const react_1 = require("react");
const useParsedAccountsData_1 = require("./parsers/useParsedAccountsData");
/**
* Fetches the SOL balance of an account.
* @returns
*/
const useSOLBalance = (accountId) => {
const { network } = (0, use_solana_1.useSolana)();
const sol = token_utils_1.RAW_SOL[network];
const parser = (0, react_1.useCallback)((data) => {
return new token_utils_1.TokenAmount(sol, data.accountInfo.lamports);
}, [sol]);
const { data } = (0, useParsedAccountsData_1.useParsedAccountData)(accountId, parser);
return (0, react_1.useMemo)(() => (0, solana_contrib_1.mapN)((data) => new token_utils_1.TokenAmount(sol, data.accountInfo.lamports), data), [data, sol]);
};
exports.useSOLBalance = useSOLBalance;
/**
* Uses the data of the raw SOL account.
* @deprecated use {@link useSOLBalance} instead
* @returns
*/
function useNativeAccount() {
const wallet = (0, use_solana_1.useConnectedWallet)();
const { network } = (0, use_solana_1.useConnectionContext)();
const sol = token_utils_1.RAW_SOL[network];
const parser = (0, react_1.useCallback)((data) => {
return new token_utils_1.TokenAmount(sol, data.accountInfo.lamports);
}, [sol]);
const { data } = (0, useParsedAccountsData_1.useParsedAccountData)(wallet === null || wallet === void 0 ? void 0 : wallet.publicKey, parser);
const balance = data === null || data === void 0 ? void 0 : data.accountInfo.lamports;
return (0, react_1.useMemo)(() => {
if (data === null) {
return {
account: null,
nativeBalance: new token_utils_1.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]);
}
exports.useNativeAccount = useNativeAccount;
//# sourceMappingURL=native.js.map
;