// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information import PostViewController from './post_view_controller.jsx'; import ChannelStore from 'stores/channel_store.jsx'; import UserStore from 'stores/user_store.jsx'; import PropTypes from 'prop-types'; import React from 'react'; const MAXIMUM_CACHED_VIEWS = 5; export default class PostViewCache extends React.Component { static propTypes = { actions: PropTypes.shape({ viewChannel: PropTypes.func.isRequired }).isRequired } constructor(props) { super(props); this.onChannelChange = this.onChannelChange.bind(this); const currentChannelId = ChannelStore.getCurrentId(); const channel = ChannelStore.getCurrent(); this.state = { currentChannelId, channels: channel ? [channel] : [] }; } componentDidMount() { ChannelStore.addChangeListener(this.onChannelChange); } componentWillUnmount() { if (UserStore.getCurrentUser()) { this.props.actions.viewChannel('', this.state.currentChannelId || ''); } ChannelStore.removeChangeListener(this.onChannelChange); } onChannelChange() { const channels = Object.assign([], this.state.channels); const currentChannel = ChannelStore.getCurrent(); if (!currentChannel) { return; } // make sure current channel really changed if (currentChannel.id === this.state.currentChannelId) { return; } if (channels.length > MAXIMUM_CACHED_VIEWS) { channels.shift(); } const index = channels.map((c) => c.id).indexOf(currentChannel.id); if (index !== -1) { channels.splice(index, 1); } channels.push(currentChannel); this.setState({ currentChannelId: currentChannel.id, channels }); } render() { const channels = this.state.channels; const currentChannelId = this.state.currentChannelId; const postViews = []; for (let i = 0; i < channels.length; i++) { postViews.push( ); } return (
{postViews}
); } }