EvoCalculator.Client2/stores/subscribers.ts
2022-05-11 19:39:32 +03:00

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);
}
}