mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-20 07:26:19 +00:00
🆙 Init V3
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
export * from './useEventDispatcher';
|
||||
export * from './useMessageEvent';
|
||||
export * from './useNitroEvent';
|
||||
export * from './useUiEvent';
|
||||
@@ -0,0 +1,31 @@
|
||||
import { IEventDispatcher, NitroEvent } from '@nitrots/nitro-renderer';
|
||||
import { useEffect } from 'react';
|
||||
|
||||
export const useEventDispatcher = <T extends NitroEvent>(type: string | string[], eventDispatcher: IEventDispatcher, handler: (event: T) => void, enabled: boolean = true) =>
|
||||
{
|
||||
useEffect(() =>
|
||||
{
|
||||
if(!enabled) return;
|
||||
|
||||
if(Array.isArray(type))
|
||||
{
|
||||
type.map(name => eventDispatcher.addEventListener(name, handler));
|
||||
}
|
||||
else
|
||||
{
|
||||
eventDispatcher.addEventListener(type, handler);
|
||||
}
|
||||
|
||||
return () =>
|
||||
{
|
||||
if(Array.isArray(type))
|
||||
{
|
||||
type.map(name => eventDispatcher.removeEventListener(name, handler));
|
||||
}
|
||||
else
|
||||
{
|
||||
eventDispatcher.removeEventListener(type, handler);
|
||||
}
|
||||
};
|
||||
}, [ type, eventDispatcher, enabled, handler ]);
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
import {
|
||||
GetCommunication,
|
||||
IMessageEvent,
|
||||
MessageEvent,
|
||||
} from '@nitrots/nitro-renderer';
|
||||
import { useEffect } from 'react';
|
||||
|
||||
export const useMessageEvent = <T extends IMessageEvent>(
|
||||
eventType: typeof MessageEvent,
|
||||
handler: (event: T) => void
|
||||
) =>
|
||||
{
|
||||
useEffect(() =>
|
||||
{
|
||||
//@ts-ignore
|
||||
const event = new eventType(handler);
|
||||
|
||||
GetCommunication().registerMessageEvent(event);
|
||||
|
||||
return () => GetCommunication().removeMessageEvent(event);
|
||||
}, [eventType, handler]);
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
import { GetEventDispatcher, NitroEvent } from '@nitrots/nitro-renderer';
|
||||
import { useEventDispatcher } from './useEventDispatcher';
|
||||
|
||||
export const useNitroEvent = <T extends NitroEvent>(
|
||||
type: string | string[],
|
||||
handler: (event: T) => void,
|
||||
enabled = true
|
||||
) => useEventDispatcher(type, GetEventDispatcher(), handler, enabled);
|
||||
@@ -0,0 +1,5 @@
|
||||
import { NitroEvent } from '@nitrots/nitro-renderer';
|
||||
import { UI_EVENT_DISPATCHER } from '../../api';
|
||||
import { useEventDispatcher } from './useEventDispatcher';
|
||||
|
||||
export const useUiEvent = <T extends NitroEvent>(type: string | string[], handler: (event: T) => void, enabled: boolean = true) => useEventDispatcher<T>(type, UI_EVENT_DISPATCHER, handler, enabled);
|
||||
Reference in New Issue
Block a user