forked from mirrors/homebox
39 lines
1,019 B
TypeScript
39 lines
1,019 B
TypeScript
|
export enum EventTypes {
|
||
|
// ClearStores event is used to inform the stores that _all_ the data they are using
|
||
|
// is now out of date and they should refresh - This is used when the user makes large
|
||
|
// changes to the data such as bulk actions or importing a CSV file
|
||
|
ClearStores,
|
||
|
}
|
||
|
|
||
|
export type EventFn = () => void;
|
||
|
|
||
|
export interface IEventBus {
|
||
|
on(event: EventTypes, fn: EventFn, key: string): void;
|
||
|
off(event: EventTypes, key: string): void;
|
||
|
emit(event: EventTypes): void;
|
||
|
}
|
||
|
|
||
|
class EventBus implements IEventBus {
|
||
|
private listeners: Record<EventTypes, Record<string, EventFn>> = {
|
||
|
[EventTypes.ClearStores]: {},
|
||
|
};
|
||
|
|
||
|
on(event: EventTypes, fn: EventFn, key: string): void {
|
||
|
this.listeners[event][key] = fn;
|
||
|
}
|
||
|
|
||
|
off(event: EventTypes, key: string): void {
|
||
|
delete this.listeners[event][key];
|
||
|
}
|
||
|
|
||
|
emit(event: EventTypes): void {
|
||
|
Object.values(this.listeners[event]).forEach(fn => fn());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const bus = new EventBus();
|
||
|
|
||
|
export function useEventBus(): IEventBus {
|
||
|
return bus;
|
||
|
}
|