@macalinao/grill
Version:
Modern Solana development kit for React applications with automatic account batching, caching, and transaction notifications
50 lines • 2.17 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { createBatchAccountsLoader } from "@macalinao/solana-batch-accounts-loader";
import { useQueryClient } from "@tanstack/react-query";
import { getExplorerLink as defaultGetExplorerLink } from "gill";
import { useSolanaClient } from "gill-react";
import { useCallback, useMemo } from "react";
import { GrillContext } from "../contexts/grill-context.js";
import { useKitWallet } from "../hooks/use-kit-wallet.js";
import { createSendTX } from "../utils/internal/create-send-tx.js";
import { refetchAccounts as doRefetchAccounts } from "../utils/refetch-accounts.js";
/**
* Headless provider component for Solana account batching functionality.
* Creates and provides a batch account loader for efficient Solana account fetching.
* This provider integrates with gill-react's useSolanaClient hook to access the RPC client.
*
* For UI integration with toast notifications, use GrillProvider instead.
*/
export const GrillHeadlessProvider = ({ children, maxBatchSize = 99, batchDurationMs = 10, onTransactionStatusEvent = (e) => {
console.log(e);
}, getExplorerLink = defaultGetExplorerLink, }) => {
const { rpc } = useSolanaClient();
const queryClient = useQueryClient();
const { signer } = useKitWallet();
const accountLoader = useMemo(() => createBatchAccountsLoader({
rpc,
maxBatchSize,
batchDurationMs,
}), [rpc, maxBatchSize, batchDurationMs]);
const refetchAccounts = useCallback(async (addresses) => {
await doRefetchAccounts({
queryClient,
accountLoader,
addresses,
});
}, [queryClient, accountLoader]);
const sendTX = useMemo(() => createSendTX({
signer,
rpc,
refetchAccounts,
onTransactionStatusEvent,
getExplorerLink,
}), [signer, rpc, refetchAccounts, onTransactionStatusEvent, getExplorerLink]);
return (_jsx(GrillContext.Provider, { value: {
accountLoader,
refetchAccounts,
sendTX,
getExplorerLink,
}, children: children }));
};
//# sourceMappingURL=grill-headless-provider.js.map