UNPKG

@saberhq/sail

Version:

Account caching and batched loading for React-based Solana applications.

42 lines (34 loc) 1.14 kB
import { createContainer } from "unstated-next"; import type { SailError } from "."; import type { UseAccounts, UseAccountsArgs, } from "./accounts/useAccountsInternal"; import { useAccountsInternal } from "./accounts/useAccountsInternal"; import type { UseHandleTXs, UseHandleTXsArgs } from "./tx/useHandleTXs"; import { useHandleTXsInternal } from "./tx/useHandleTXs"; export interface UseSail extends UseAccounts, UseHandleTXs {} export type UseSailArgs = Omit< UseAccountsArgs & Omit<UseHandleTXsArgs, "refetchMany">, "onError" > & { onSailError?: (err: SailError) => void; }; const defaultOnError = (err: SailError) => console.error(err.message, err); const useSailInternal = ({ onSailError = defaultOnError, ...args }: UseSailArgs = {}): UseSail => { const accounts = useAccountsInternal({ ...args, onError: onSailError }); const handleTXs = useHandleTXsInternal({ ...args, onError: onSailError, refetchMany: accounts.refetchMany, }); return { ...accounts, ...handleTXs, }; }; export const { Provider: SailProvider, useContainer: useSail } = createContainer(useSailInternal);