24 lines
636 B
TypeScript
24 lines
636 B
TypeScript
/* eslint-disable object-curly-newline */
|
|
import { makeAutoObservable } from 'mobx';
|
|
|
|
export type Callback = (data: any) => void;
|
|
type Subscriber = { name: string; callback: Callback };
|
|
|
|
export default class SubscribersStore {
|
|
#subscribers = new Set<Subscriber>();
|
|
|
|
constructor() {
|
|
makeAutoObservable(this);
|
|
}
|
|
|
|
subscribe = (subscriber: Subscriber) => {
|
|
this.#subscribers.add(subscriber);
|
|
return () => this.#subscribers.delete(subscriber);
|
|
};
|
|
|
|
runCallback(name: string, data: any) {
|
|
const callback = Array.from(this.#subscribers).find((x) => x.name === name);
|
|
if (callback) callback.callback(data);
|
|
}
|
|
}
|