@v4fire/client
Version:
V4Fire client core library
58 lines (48 loc) • 1.52 kB
text/typescript
/*!
* V4Fire Client Core
* https://github.com/V4Fire/Client
*
* Released under the MIT license
* https://github.com/V4Fire/Client/blob/master/LICENSE
*/
import type { AsyncOptions } from 'core/async';
import type bVirtualScrollNew from 'base/b-virtual-scroll-new/b-virtual-scroll-new';
import type { ComponentEvents, LocalEventPayload } from 'base/b-virtual-scroll-new/interface';
import type { ComponentTypedEmitter } from 'base/b-virtual-scroll-new/modules/emitter/interface';
export * from 'base/b-virtual-scroll-new/modules/emitter/interface';
/**
* Provides methods for interacting with the `selfEmitter` using typed events
* @param ctx
*/
export function componentTypedEmitter(ctx: bVirtualScrollNew): ComponentTypedEmitter {
const once = <EVENT extends ComponentEvents>(
event: EVENT,
handler: (...args: LocalEventPayload<EVENT>) => void,
asyncOpts?: AsyncOptions
) => {
ctx.once(event, <Function>handler, asyncOpts);
};
const on = <EVENT extends ComponentEvents>(
event: EVENT,
handler: (...args: LocalEventPayload<EVENT>) => void,
asyncOpts?: AsyncOptions
) => {
ctx.on(event, <Function>handler, asyncOpts);
};
const promisifyOnce = <EVENT extends ComponentEvents>(
event: EVENT,
asyncOpts?: AsyncOptions
) => ctx.promisifyOnce(event, asyncOpts);
const emit = <EVENT extends ComponentEvents>(
event: EVENT,
...payload: LocalEventPayload<EVENT>
) => {
ctx.emit(event, ...payload);
};
return <ComponentTypedEmitter>{
once,
on,
promisifyOnce,
emit
};
}