You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
724 B
28 lines
724 B
import { 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(); |
|
|
|
addMessage(message: UiMessageProps) { |
|
const { timeout, ...otherProps } = message; |
|
const msg = observable({ |
|
...otherProps, |
|
id: getRandomId(), |
|
}); |
|
this.messages.push(msg); |
|
if (timeout) { |
|
setTimeout(() => this.messages.remove(msg), timeout); |
|
} |
|
} |
|
}
|
|
|