import { action, IObservableArray, observable } from "mobx"; import { MessageProps } from "semantic-ui-react"; import { getRandomId } from "@common/utils"; export interface UiMessage extends MessageProps { id: number; } export interface UiMessageProps extends MessageProps { timeout?: number; } export class UiStore { messages: IObservableArray = observable.array(); @action addMessage(message: UiMessageProps): UiMessage { const { timeout, ...otherProps } = message; const msg = observable({ ...otherProps, id: getRandomId(), }); this.messages.push(msg); if (timeout) { setTimeout(() => { this.removeMessage(msg); }, timeout); } return msg; } @action removeMessage(message: UiMessage) { return this.messages.remove(message); } }