2022-07-18 20:48:54 -04:00
|
|
|
import { IEventDispatcher, NitroEvent } from '@nitrots/nitro-renderer';
|
|
|
|
import { useEffect } from 'react';
|
|
|
|
|
2022-07-23 21:15:24 -04:00
|
|
|
export const useEventDispatcher = <T extends NitroEvent>(type: string | string[], eventDispatcher: IEventDispatcher, handler: (event: T) => void, enabled: boolean = true) =>
|
2022-07-18 20:48:54 -04:00
|
|
|
{
|
|
|
|
useEffect(() =>
|
|
|
|
{
|
2022-07-23 21:15:24 -04:00
|
|
|
if(!enabled) return;
|
|
|
|
|
2022-07-18 20:48:54 -04:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
2022-07-23 21:15:24 -04:00
|
|
|
}, [ type, eventDispatcher, enabled, handler ]);
|
2022-07-18 20:48:54 -04:00
|
|
|
}
|