Files
frontend/src/core/events/EventBus.ts

30 lines
840 B
TypeScript
Raw Normal View History

type Subscriber<T> = (event: T) => void;
export type AppEvent =
| { type: 'NAVIGATE'; payload: { path: string; params?: Record<string, any> } }
| { type: 'NAVIGATE_BACK' }
| { type: 'SHOW_VERIFICATION_MODAL' }
| { type: 'VIBRATE'; payload: { type: 'message' | 'group_message' | 'call' } }
| { type: 'AUTH_LOGOUT' };
class EventBusClass {
private subscribers: Set<Subscriber<AppEvent>> = new Set();
emit(event: AppEvent): void {
this.subscribers.forEach(subscriber => {
try {
subscriber(event);
} catch (error) {
console.error('[EventBus] Subscriber error:', error);
}
});
}
subscribe(subscriber: Subscriber<AppEvent>): () => void {
this.subscribers.add(subscriber);
return () => this.subscribers.delete(subscriber);
}
}
export const eventBus = new EventBusClass();