Skip to content

Commit 86b4e05

Browse files
committed
refactor: add type suggestion for useWatchInternalEvent
1 parent f4555db commit 86b4e05

File tree

4 files changed

+19
-17
lines changed

4 files changed

+19
-17
lines changed

packages/typink/src/hooks/useWatchContractEvent.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { useWatchInternalEvent } from './useWatchInternalEvent.js';
44
import { InternalEvent } from '../utils/events.js';
55
import { useCallback } from 'react';
66
import { useDeepDeps } from './internal/useDeepDeps.js';
7-
import type { FrameSystemEventRecord } from 'dedot/chaintypes/index.js';
87

98
export type UseContractEvent<A extends GenericContractApi = GenericContractApi> = OmitNever<{
109
[K in keyof A['events']]: K extends string ? (K extends `${infer Literal}` ? Literal : never) : never;
@@ -31,10 +30,10 @@ export function useWatchContractEvent<
3130
onNewEvent: (events: ReturnType<T['events'][M]['filter']>) => void,
3231
enabled: boolean = true,
3332
): void {
34-
useWatchInternalEvent({
35-
event: InternalEvent.SYSTEM_EVENTS,
36-
callback: useCallback(
37-
(events: FrameSystemEventRecord[]) => {
33+
useWatchInternalEvent(
34+
InternalEvent.SYSTEM_EVENTS,
35+
useCallback(
36+
(events) => {
3837
if (!contract || !enabled) return;
3938

4039
const contractEvents = contract.events[event].filter(events);
@@ -47,5 +46,5 @@ export function useWatchContractEvent<
4746
useDeepDeps([contract, event, onNewEvent]),
4847
),
4948
enabled,
50-
});
49+
);
5150
}

packages/typink/src/hooks/useWatchInternalEvent.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useEffect } from 'react';
22
import { useDeepDeps } from './internal/index.js';
33
import { useTypink } from './useTypink.js';
4-
import { InternalEvent } from 'src/utils/events.js';
4+
import { InternalCallback, InternalEvent } from '../utils/events.js';
55

66
/**
77
* A React hook that watches for internal system events.
@@ -14,12 +14,11 @@ import { InternalEvent } from 'src/utils/events.js';
1414
* @param parameters.callback - Callback function to be called when new events are detected.
1515
* @param parameters.enabled - Optional boolean to enable or disable the event watching. Defaults to true.
1616
*/
17-
export function useWatchInternalEvent(parameters: {
18-
event: InternalEvent;
19-
callback: (events: any[]) => void;
20-
enabled?: boolean;
21-
}) {
22-
const { event, callback, enabled = true } = parameters;
17+
export function useWatchInternalEvent<T extends InternalEvent>(
18+
event: T,
19+
callback: InternalCallback[T],
20+
enabled: boolean = true,
21+
) {
2322
const { subscribeToEvent, client } = useTypink();
2423

2524
useEffect(

packages/typink/src/providers/ListenersProvider.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { createContext, useContext, useEffect } from 'react';
22
import { Props } from '../types.js';
33
import { useClient } from './ClientProvider.js';
4-
import { Callback, InternalEE, InternalEvent, Unsub } from '../utils/events.js';
4+
import { InternalEE, InternalEvent, Unsub } from '../utils/events.js';
55
import { useListenerCounter } from '../hooks/internal/useListenerCounter.js';
66

77
export interface ListenersContextProps {
8-
subscribeToEvent: (event: InternalEvent, callback: Callback) => Unsub | undefined;
8+
subscribeToEvent: (event: InternalEvent, callback: (events: any[]) => void) => Unsub | undefined;
99
}
1010

1111
export const ListenersContext = createContext<ListenersContextProps>({} as any);
@@ -41,7 +41,7 @@ export function ListenersProvider({ children }: Props) {
4141
};
4242
}, [client, hasListener]);
4343

44-
const subscribeToEvent = (event: InternalEvent, callback: Callback): Unsub | undefined => {
44+
const subscribeToEvent = (event: InternalEvent, callback: (events: any[]) => void): Unsub | undefined => {
4545
if (!client || !InternalEE) {
4646
return;
4747
}

packages/typink/src/utils/events.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
import { FrameSystemEventRecord } from 'dedot/chaintypes';
12
import { EventEmitter } from 'dedot/utils';
23

3-
export type Callback = (events: any[]) => void;
4+
export type InternalCallback = {
5+
[InternalEvent.SYSTEM_EVENTS]: (events: FrameSystemEventRecord[]) => void;
6+
};
7+
48
export type Unsub = () => void;
59
export enum InternalEvent {
610
SYSTEM_EVENTS = 'SYSTEM_EVENTS',

0 commit comments

Comments
 (0)