import React, { Component } from 'react';
import { VirtualScroll } from 'react-virtualized';
import pure from 'pure-render-decorator';
import Message from './Message';
@pure
export default class MessageBox extends Component {
state = {
height: window.innerHeight - 100
};
componentDidMount() {
this.updateWidth();
window.addEventListener('resize', this.handleResize);
}
componentWillReceiveProps() {
const el = this.list.refs.scrollingContainer;
this.autoScroll = el.scrollTop + el.offsetHeight === el.scrollHeight;
}
componentWillUpdate(nextProps) {
if (nextProps.messages !== this.props.messages) {
this.list.recomputeRowHeights();
}
}
componentDidUpdate() {
this.updateWidth();
if (this.autoScroll) {
const el = this.list.refs.scrollingContainer;
el.scrollTop = el.scrollHeight;
}
}
componentWillUnmount() {
window.removeEventListener('resize', this.handleResize);
}
getRowHeight = index => {
const { messages } = this.props;
if (index === 0 || index === messages.size + 1) {
return 7;
}
return messages.get(index - 1).height;
};
updateWidth = resize => {
const { isChannel, setWrapWidth, updateMessageHeight } = this.props;
if (this.list) {
let width = this.list.refs.scrollingContainer.clientWidth - 30;
if (isChannel) {
width += 200;
}
if (this.width !== width) {
this.width = width;
setWrapWidth(width);
if (resize) {
updateMessageHeight();
}
}
}
};
listRef = el => { this.list = el; };
handleResize = () => {
this.updateWidth(true);
this.setState({ height: window.innerHeight - 100 });
};
renderMessage = index => {
const { messages } = this.props;
if (index === 0 || index === messages.size + 1) {
return ;
}
const { select, openPrivateChat } = this.props;
const message = messages.get(index - 1);
return (