@starknet-react/core
Version:
Starknet React is a collection of React hooks for Starknet.
76 lines (69 loc) • 2.08 kB
text/typescript
import type { Address } from "@starknet-react/chains";
import type {
Abi,
ExtractAbiFunction,
ExtractAbiFunctionNames,
ExtractArgs,
FunctionRet,
} from "abi-wan-kanabi/kanabi";
import type { BlockNumber } from "starknet";
import type { UseQueryProps, UseQueryResult } from "../query";
import { type CallQueryKey, type UseCallProps, useCall } from "./use-call";
type Result<
TAbi extends Abi,
TFunctionName extends ExtractAbiFunctionNames<TAbi>,
> = FunctionRet<TAbi, TFunctionName>;
/** Options for `useReadContract`. */
export type UseReadContractProps<
TAbi extends Abi,
TFunctionName extends ExtractAbiFunctionNames<TAbi>,
> = UseQueryProps<
Result<TAbi, TFunctionName>,
Error,
Result<TAbi, TFunctionName>,
ReturnType<CallQueryKey>
> & {
/** The target contract's ABI.
*
* @remarks
*
* You must pass ABI as const
*
*/
abi?: TAbi;
/** The target contract's address. */
address?: Address;
/** Refresh data at every block. */
watch?: boolean;
/** The contract's function name. */
functionName: TFunctionName;
/** Read arguments. */
args?: ExtractArgs<TAbi, ExtractAbiFunction<TAbi, TFunctionName>>;
/** Block identifier used when performing call. */
blockIdentifier?: BlockNumber;
};
/** Value returned from `useReadContract`. */
export type UseReadContractResult<
TAbi extends Abi,
TFunctionName extends ExtractAbiFunctionNames<TAbi>,
> = UseQueryResult<Result<TAbi, TFunctionName>, Error>;
/**
* Perform a read-only contract call. If the specified block identifier is pending,
* the hook will periodically refetch data automatically.
*
* @remarks
*
* - The hook only performs a call if the target `abi`, `address`,
* `functionName`, and `args` are not undefined.
*
* - You must pass `abi` as `const` for autocomplete to work.
*/
export function useReadContract<
TAbi extends Abi,
TFunctionName extends ExtractAbiFunctionNames<TAbi>,
>(props: UseReadContractProps<TAbi, TFunctionName>) {
return useCall(props as UseCallProps) as UseReadContractResult<
TAbi,
TFunctionName
>;
}