-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathuseScaffoldEventSubscriber.ts
More file actions
32 lines (30 loc) · 1.22 KB
/
useScaffoldEventSubscriber.ts
File metadata and controls
32 lines (30 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { Abi, ExtractAbiEventNames } from "abitype";
import { Log } from "viem";
import { useContractEvent } from "wagmi";
import { useDeployedContractInfo } from "~~/hooks/scaffold-eth";
import { getTargetNetwork } from "~~/utils/scaffold-eth";
import { ContractAbi, ContractName, UseScaffoldEventConfig } from "~~/utils/scaffold-eth/contract";
/**
* @dev wrapper for wagmi's useContractEvent
* @param config - The config settings
* @param config.contractName - deployed contract name
* @param config.eventName - name of the event to listen for
* @param config.listener - the callback that receives events. If only interested in 1 event, call `unwatch` inside of the listener
*/
export const useScaffoldEventSubscriber = <
TContractName extends ContractName,
TEventName extends ExtractAbiEventNames<ContractAbi<TContractName>>,
>({
contractName,
eventName,
listener,
}: UseScaffoldEventConfig<TContractName, TEventName>) => {
const { data: deployedContractData } = useDeployedContractInfo(contractName);
return useContractEvent({
address: deployedContractData?.address,
abi: deployedContractData?.abi as Abi,
chainId: getTargetNetwork().id,
listener: listener as (logs: Log[]) => void,
eventName,
});
};