UNPKG

@macalinao/grill

Version:

Modern Solana development kit for React applications with automatic account batching, caching, and transaction notifications

50 lines 2.17 kB
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