@saberhq/sail
Version:
Account caching and batched loading for React-based Solana applications.
67 lines • 2.03 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.usePubkeysMemo = exports.usePubkeyMemo = exports.usePubkey = void 0;
const web3_js_1 = require("@solana/web3.js");
const react_1 = require("react");
const utils_1 = require("../utils");
/**
* Parses a Pubkey.
* @param raw The string or Pubkey representation of the key.
* @returns
*/
const usePubkey = (raw) => {
return (0, react_1.useMemo)(() => {
if (raw === undefined) {
return raw;
}
if (!raw) {
return null;
}
if (raw instanceof web3_js_1.PublicKey) {
return raw;
}
try {
return new web3_js_1.PublicKey(raw);
}
catch (e) {
return null;
}
}, [raw]);
};
exports.usePubkey = usePubkey;
/**
* Uses a {@link PublicKey}, ensuring the reference does not change if the key changes.
* @param raw The string or Pubkey representation of the key.
* @returns
*/
const usePubkeyMemo = (raw) => {
const keyNoMemo = (0, exports.usePubkey)(raw);
return (0, react_1.useMemo)(() => {
return keyNoMemo;
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [keyNoMemo === null || keyNoMemo === void 0 ? void 0 : keyNoMemo.toString()]);
};
exports.usePubkeyMemo = usePubkeyMemo;
/**
* Loads and parses multiple {@link PublicKey}s, preserving the reference.
*/
const usePubkeysMemo = (keys) => {
return (0, react_1.useMemo)(() => {
return keys.map((k) => {
if (typeof k === "string") {
try {
return new web3_js_1.PublicKey(k);
}
catch (e) {
return null;
}
}
else {
return k;
}
});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [JSON.stringify((0, utils_1.serializeKeys)(keys))]);
};
exports.usePubkeysMemo = usePubkeysMemo;
//# sourceMappingURL=usePubkey.js.map
;