/* @flow */ import React from 'react'; import Flux from '../lib/flux'; import PureRenderMixin from 'react-addons-pure-render-mixin'; import ChannelNoticesStore from '../stores/ChannelNoticesStore'; import GuildMFAWarning from './channel_notices/GuildMFAWarning'; import {showNotice} from '../actions/ChannelNoticeActionCreators'; import InviteNotice from './channel_notices/InviteNotice'; import QuickSwitcherNotice from './channel_notices/QuickSwitcherNotice'; import ChannelNoticeRegistry from '../lib/ChannelNoticeRegistry'; import AppAnalyticsUtils from '../utils/AppAnalyticsUtils'; import {AnalyticEvents} from '../Constants'; import '../styles/channel_notices.styl'; const NOTICE_REGISTRY = new ChannelNoticeRegistry([GuildMFAWarning, InviteNotice, QuickSwitcherNotice]); const ChannelNotices = React.createClass({ mixins: [PureRenderMixin, Flux.LazyStoreListenerMixin(ChannelNoticesStore, ...NOTICE_REGISTRY.getStores())], propTypes: { guild: React.PropTypes.object.isRequired, }, getInitialState() { return this.getStateFromStores(); }, getStateFromStores() { const channelStoreState = ChannelNoticesStore.getState(); const {noticeStates, lastHidden} = channelStoreState; const {guild} = this.props; return { ...channelStoreState, Notice: NOTICE_REGISTRY.getNotice(noticeStates, guild, lastHidden), }; }, componentDidMount() { const {guild} = this.props; const {Notice} = this.state; if (Notice != null) { showNotice(Notice.Type, guild); } }, componentDidUpdate() { const {guild} = this.props; const {Notice} = this.state; if (Notice != null) { showNotice(Notice.Type, guild); } }, render() { const {guild} = this.props; const {Notice} = this.state; if (Notice == null) { return null; } AppAnalyticsUtils.trackWithMetadata(AnalyticEvents.CHANNEL_NOTICE_VIEWED, { // eslint-disable-next-line camelcase notice_type: Notice.Type, }); return (