import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { getSettings } from 'soapbox/actions/settings'; import ChatList from './chat_list'; import { FormattedMessage } from 'react-intl'; import { makeGetChat } from 'soapbox/selectors'; import { openChat, toggleMainWindow } from 'soapbox/actions/chats'; import ChatWindow from './chat_window'; import { shortNumberFormat } from 'soapbox/utils/numbers'; import AudioToggle from 'soapbox/features/chats/components/audio_toggle'; const addChatsToPanes = (state, panesData) => { const getChat = makeGetChat(); const newPanes = panesData.get('panes').map(pane => { const chat = getChat(state, { id: pane.get('chat_id') }); return pane.set('chat', chat); }); return panesData.set('panes', newPanes); }; const mapStateToProps = state => { const panesData = getSettings(state).get('chats'); return { panesData: addChatsToPanes(state, panesData), unreadCount: state.get('chats').reduce((acc, curr) => acc + Math.min(curr.get('unread', 0), 1), 0), }; }; export default @connect(mapStateToProps) @injectIntl class ChatPanes extends ImmutablePureComponent { static propTypes = { dispatch: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, panesData: ImmutablePropTypes.map, } handleClickChat = (chat) => { this.props.dispatch(openChat(chat.get('id'))); } handleMainWindowToggle = () => { this.props.dispatch(toggleMainWindow()); } render() { const { panesData, unreadCount } = this.props; const panes = panesData.get('panes'); const mainWindow = panesData.get('mainWindow'); const mainWindowPane = (