react-scope-event-emitter.ts 910 B

1234567891011121314151617181920212223242526
  1. import {
  2. ScopeEventEmitter,
  3. ScopeEventName,
  4. } from '../../../../../types/ide/scope-event-emitter'
  5. import EventEmitter from 'events'
  6. export class ReactScopeEventEmitter implements ScopeEventEmitter {
  7. // eslint-disable-next-line no-useless-constructor
  8. constructor(private readonly eventEmitter: EventEmitter) {}
  9. emit(eventName: ScopeEventName, broadcast: boolean, ...detail: unknown[]) {
  10. this.eventEmitter.emit(eventName, ...detail)
  11. }
  12. on(eventName: ScopeEventName, listener: (...args: unknown[]) => void) {
  13. // A listener attached via useScopeEventListener expects an event as the
  14. // first parameter. We don't have one, so just provide an empty object
  15. const wrappedListener = (...detail: unknown[]) => {
  16. listener({}, ...detail)
  17. }
  18. this.eventEmitter.on(eventName, wrappedListener)
  19. return () => {
  20. this.eventEmitter.off(eventName, wrappedListener)
  21. }
  22. }
  23. }