venom-connect
Version:
<p align="center"> <a href="https://github.com/venom-blockchain/developer-program"> <img src="https://raw.githubusercontent.com/venom-blockchain/developer-program/main/vf-dev-program.png" alt="Logo" width="366.8" height="146.4"> </a> </p>
47 lines (40 loc) • 1.29 kB
text/typescript
import { EventCallback } from "../types";
export class EventController {
private _eventCallbacks: EventCallback[];
constructor() {
this._eventCallbacks = [];
}
public on(eventCallback: EventCallback) {
this._eventCallbacks.push(eventCallback);
}
public off(eventObj?: Partial<EventCallback>) {
// remove specific event callback
if (eventObj) {
if (eventObj.callback) {
this._eventCallbacks = this._eventCallbacks.filter(
(eventCallback: EventCallback) =>
eventCallback.event !== eventObj.event ||
eventCallback.callback !== eventObj.callback
);
} // No callback to remove, remove entire event
else {
this._eventCallbacks = this._eventCallbacks.filter(
(eventCallback: EventCallback) =>
eventCallback.event !== eventObj.event
);
}
} else {
this._eventCallbacks = [];
}
}
public trigger(event: string, result?: any): void {
let eventCallbacks: EventCallback[] = this._eventCallbacks.filter(
(eventCallback: EventCallback) => eventCallback.event === event
);
if (eventCallbacks?.length) {
eventCallbacks.forEach((eventCallback: EventCallback) => {
eventCallback.callback(result);
});
}
}
}