sprinklers3/client/state/UiStore.ts

38 lines
911 B
TypeScript
Raw Normal View History

2018-08-13 15:11:36 +03:00
import { action, IObservableArray, observable } from "mobx";
2017-09-10 11:23:54 -06:00
import { MessageProps } from "semantic-ui-react";
import { getRandomId } from "@common/utils";
2017-05-30 16:45:25 -06:00
2017-09-10 12:30:23 -06:00
export interface UiMessage extends MessageProps {
2017-09-10 11:23:54 -06:00
id: number;
2017-05-30 16:45:25 -06:00
}
export interface UiMessageProps extends MessageProps {
timeout?: number;
}
2017-05-30 16:45:25 -06:00
export class UiStore {
2017-09-10 12:30:23 -06:00
messages: IObservableArray<UiMessage> = observable.array();
2017-05-30 16:45:25 -06:00
2018-08-13 15:11:36 +03:00
@action
addMessage(message: UiMessageProps): UiMessage {
const { timeout, ...otherProps } = message;
const msg = observable({
...otherProps,
2017-09-10 11:23:54 -06:00
id: getRandomId(),
});
this.messages.push(msg);
if (timeout) {
2018-08-13 15:11:36 +03:00
setTimeout(() => {
this.removeMessage(msg);
}, timeout);
}
2018-08-13 15:11:36 +03:00
return msg;
}
@action
removeMessage(message: UiMessage) {
return this.messages.remove(message);
2017-05-30 16:45:25 -06:00
}
}