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.
30 lines
1.3 KiB
30 lines
1.3 KiB
import {observer} from "mobx-react"; |
|
import * as React from "react"; |
|
import {CSSTransitionGroup} from "react-transition-group"; |
|
import {Message} from "semantic-ui-react"; |
|
import {Message as UiMessage, UiStore} from "../ui"; |
|
|
|
@observer |
|
export default class MessagesView extends React.PureComponent<{ uiStore: UiStore }, {}> { |
|
render() { |
|
return <div className="messages"> |
|
<CSSTransitionGroup transitionName="message" transitionAppear={true} transitionAppearTimeout={500} |
|
transitionEnterTimeout={500} transitionLeaveTimeout={500}> |
|
{this.props.uiStore.messages.map(this.renderMessage)} |
|
</CSSTransitionGroup> |
|
</div>; |
|
} |
|
|
|
private renderMessage = (message: UiMessage, index: number) => { |
|
const {header, content, type} = message; |
|
return <Message key={message.id} className="message" |
|
header={header} content={content} |
|
success={type === UiMessage.Type.Success} |
|
info={type === UiMessage.Type.Info} warning={type === UiMessage.Type.Warning} |
|
error={type === UiMessage.Type.Error} onDismiss={() => this.dismiss(index)}/>; |
|
} |
|
|
|
private dismiss(index: number) { |
|
this.props.uiStore.messages.splice(index, 1); |
|
} |
|
}
|
|
|