text: // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
  // See LICENSE.txt for license information.
  
  import {bindActionCreators} from 'redux';
  import {connect} from 'react-redux';
  
  import {handleSelectChannel} from '@actions/views/channel';
  import {getPostsAround, getPostThread} from '@actions/views/post';
  import {handleTeamChange} from '@actions/views/select_team';
  import {getChannel as getChannelAction, joinChannel} from '@mm-redux/actions/channels';
  import {selectPost} from '@mm-redux/actions/posts';
  import {makeGetChannel, getMyChannelMemberships} from '@mm-redux/selectors/entities/channels';
  import {makeGetPostIdsAroundPost, getPost} from '@mm-redux/selectors/entities/posts';
  import {getTheme} from '@mm-redux/selectors/entities/preferences';
  import {getCurrentTeamId} from '@mm-redux/selectors/entities/teams';
  import {getCurrentUserId} from '@mm-redux/selectors/entities/users';
  import {isLandscape} from '@selectors/device';
  
  import Permalink from './permalink';
  
  function makeMapStateToProps() {
      const getPostIdsAroundPost = makeGetPostIdsAroundPost();
      const getChannel = makeGetChannel();
  
      return function mapStateToProps(state) {
          const {currentFocusedPostId} = state.entities.posts;
          const post = getPost(state, currentFocusedPostId);
  
          let channel;
          let postIds;
  
          if (post) {
              channel = getChannel(state, {id: post.channel_id});
              postIds = getPostIdsAroundPost(state, currentFocusedPostId, post.channel_id, {
                  postsBeforeCount: 10,
                  postsAfterCount: 10,
              });
          }
  
          return {
              channelId: channel ? channel.id : '',
              channelIsArchived: channel ? channel.delete_at !== 0 : false,
              channelName: channel ? channel.display_name : '',
              channelTeamId: channel ? channel.team_id : '',
              currentTeamId: getCurrentTeamId(state),
              currentUserId: getCurrentUserId(state),
              focusedPostId: currentFocusedPostId,
              myMembers: getMyChannelMemberships(state),
              postIds,
              theme: getTheme(state),
              isLandscape: isLandscape(state),
          };
      };
  }
  
  function mapDispatchToProps(dispatch) {
      return {
          actions: bindActionCreators({
              getPostsAround,
              getPostThread,
              getChannel: getChannelAction,
              handleSelectChannel,
              handleTeamChange,
              joinChannel,
              selectPost,
          }, dispatch),
      };
  }
  
  export default connect(makeMapStateToProps, mapDispatchToProps, null, {forwardRef: true})(Permalink);
  