|
|
@@ -2,20 +2,26 @@ import {
|
|
|
ScopeEventEmitter,
|
|
|
ScopeEventName,
|
|
|
} from '../../../../../types/ide/scope-event-emitter'
|
|
|
+import { IdeEvents } from '@/features/ide-react/create-ide-event-emitter'
|
|
|
|
|
|
export class ReactScopeEventEmitter implements ScopeEventEmitter {
|
|
|
// eslint-disable-next-line no-useless-constructor
|
|
|
constructor(private readonly eventEmitter: EventTarget) {}
|
|
|
|
|
|
- emit(eventName: ScopeEventName, broadcast: boolean, ...detail: unknown[]) {
|
|
|
+ emit<T extends ScopeEventName>(
|
|
|
+ eventName: T,
|
|
|
+ broadcast: boolean,
|
|
|
+ ...detail: IdeEvents[T]
|
|
|
+ ) {
|
|
|
this.eventEmitter.dispatchEvent(new CustomEvent(eventName, { detail }))
|
|
|
}
|
|
|
|
|
|
- on(eventName: ScopeEventName, listener: (...args: unknown[]) => void) {
|
|
|
- // A listener attached via useScopeEventListener expects an event as the
|
|
|
- // first parameter. We don't have one, so just provide an empty object
|
|
|
- const wrappedListener = (event: CustomEvent<unknown[]>) => {
|
|
|
- listener({}, ...event.detail)
|
|
|
+ on<T extends ScopeEventName>(
|
|
|
+ eventName: T,
|
|
|
+ listener: (event: Event, ...args: IdeEvents[T]) => void
|
|
|
+ ) {
|
|
|
+ const wrappedListener = (event: CustomEvent<IdeEvents[T]>) => {
|
|
|
+ listener(event, ...event.detail)
|
|
|
}
|
|
|
this.eventEmitter.addEventListener(
|
|
|
eventName,
|