nitro-react/src/hooks/events/useEventDispatcher.tsx
2022-07-23 21:15:24 -04:00

32 lines
925 B
TypeScript

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 ]);
}