You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Listenable.ts 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import EventEmitter, { EventListener } from './EventEmitter';
  2. /**
  3. * The class implements basic event operations - add/remove listener.
  4. * NOTE: The purpose of the class is to be extended in order to add
  5. * this functionality to other classes.
  6. */
  7. export default class Listenable {
  8. public eventEmitter: EventEmitter;
  9. public addEventListener: typeof EventEmitter.prototype.addListener;
  10. public removeEventListener: typeof EventEmitter.prototype.removeListener;
  11. public on: typeof EventEmitter.prototype.addListener;
  12. public off: typeof EventEmitter.prototype.removeListener;
  13. /**
  14. * Creates new instance.
  15. * @constructor
  16. */
  17. constructor() {
  18. this.eventEmitter = new EventEmitter();
  19. // aliases for addListener/removeListener
  20. this.addEventListener = this.on = this.addListener;
  21. this.removeEventListener = this.off = this.removeListener;
  22. }
  23. /**
  24. * Adds new cancellable listener.
  25. * @param {String} eventName the name of the event
  26. * @param {Function} listener the listener.
  27. * @returns {Function} - The unsubscribe function.
  28. */
  29. addCancellableListener(eventName: string, listener: EventListener): () => void {
  30. this.addListener(eventName, listener);
  31. return () => this.removeListener(eventName, listener);
  32. }
  33. /**
  34. * Adds new listener.
  35. * @param {String} eventName the name of the event
  36. * @param {Function} listener the listener.
  37. * @returns {EventEmitter} - The emitter, so that calls can be chained.
  38. */
  39. addListener(eventName: string, listener: EventListener): EventEmitter {
  40. return this.eventEmitter.addListener(eventName, listener);
  41. }
  42. /**
  43. * Removes listener.
  44. * @param {String} eventName the name of the event that triggers the
  45. * listener
  46. * @param {Function} listener the listener.
  47. * @returns {EventEmitter} - The emitter, so that calls can be chained.
  48. */
  49. removeListener(eventName: string, listener: EventListener): EventEmitter {
  50. return this.eventEmitter.removeListener(eventName, listener);
  51. }
  52. /**
  53. * Emits an event.
  54. * @param {string} event - event name
  55. */
  56. emit(event: string, ...args: any[]): void {
  57. this.eventEmitter.emit(event, ...args);
  58. }
  59. }