@macalinao/grill
Version:
Modern Solana development kit for React applications with automatic account batching, caching, and transaction notifications
44 lines • 1.52 kB
JavaScript
import { useQueries } from "@tanstack/react-query";
import { createPdaQuery } from "./pda-query-utils.js";
/**
* Creates a hook for computing multiple PDAs (Program Derived Addresses) with caching
*
* @param pdaFn - A function that computes a PDA from some arguments
* @param queryKeyPrefix - A unique prefix for the react-query cache key
* @returns A hook that computes and caches multiple PDAs
*
* @example
* ```typescript
* import { findAssociatedTokenPda } from "@solana-program/token";
*
* const useAssociatedTokenPdas = createPdasHook(
* findAssociatedTokenPda,
* "associatedTokenPdas"
* );
*
* // In a component:
* const pdas = useAssociatedTokenPdas([
* { mint: mintAddress1, owner: ownerAddress1, tokenProgram: TOKEN_PROGRAM_ADDRESS },
* { mint: mintAddress2, owner: ownerAddress2, tokenProgram: TOKEN_PROGRAM_ADDRESS },
* ]);
* ```
*/
export function createPdasHook(pdaFn, queryKeyPrefix) {
return function usePdas(args) {
const result = useQueries({
queries: (args ?? []).map((arg) => createPdaQuery(pdaFn, queryKeyPrefix, arg)),
combine: (results) => {
if (!args) {
return args;
}
const keys = results.map((result) => result.data);
if (keys.some((key) => key === undefined)) {
return null;
}
return keys;
},
});
return result;
};
}
//# sourceMappingURL=create-pdas-hook.js.map