Files
michaelschiemer/resources/js/core/events.js

47 lines
1.0 KiB
JavaScript

// src/core/events.js
// --- 1. Globaler EventBus ---
const listeners = new Map();
/**
* Abonniert ein benanntes Event
*/
export function on(eventName, callback) {
if (!listeners.has(eventName)) listeners.set(eventName, []);
listeners.get(eventName).push(callback);
// Unsubscribe
return () => {
const arr = listeners.get(eventName);
if (arr) listeners.set(eventName, arr.filter(fn => fn !== callback));
};
}
/**
* Sendet ein benanntes Event mit Payload
*/
export function emit(eventName, payload) {
const arr = listeners.get(eventName);
if (arr) arr.forEach(fn => fn(payload));
}
// --- 2. ActionDispatcher ---
const actionListeners = new Set();
/**
* Action registrieren (globaler Listener für alle Aktionen)
*/
export function registerActionListener(callback) {
actionListeners.add(callback);
return () => actionListeners.delete(callback);
}
/**
* Aktion ausführen
*/
export function dispatchAction(type, payload = {}) {
actionListeners.forEach(fn => fn({ type, payload }));
}