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