UNPKG

meses-messaging

Version:

Meses messaging SDK in JavaScript

76 lines (63 loc) 2.39 kB
import React from 'react' import moment from 'moment' import styles from './styles.css' import Divider from './Divider' import MessageEntry from './MessageEntry' class MessageListBody extends React.Component { constructor() { super() } componentDidMount() { let { loadMoreMessage } = this.props this.container.addEventListener('scroll', function() { if (this.container.scrollTop == 0) loadMoreMessage() }.bind(this)) } componentWillUpdate(nextProps, nextState) { this.scrollBottom = (this.container.scrollTop == this.container.scrollHeight - this.container.offsetHeight) this.tmpScrollTop = this.container.scrollHeight } componentDidUpdate(prevProps, prevState) { if (prevProps.messageList.length == 0) this.container.scrollTop = this.container.scrollHeight else if (this.props.messageList.length > prevProps.messageList.length) this.container.scrollTop = this.container.scrollHeight - this.tmpScrollTop if (this.scrollBottom) this.container.scrollTop = this.container.scrollHeight } render() { let { messageList, messageBuffer, connectedUsername, hasMoreMessage } = this.props let entries = [] let prevDate = null const oneYearMillis = 365 * 24 * 60 * 60 * 1000 const dateFormat = function(time, format) { let dateTime = moment(time) return (dateTime.isValid()) ? dateTime.format(format) : '-' } messageList.concat(messageBuffer).forEach((x, i) => { const timeDiff = new Date().getTime() - x.messageId const format = timeDiff >= oneYearMillis ? 'MM/DD/YYYY' : 'ddd, MMM Do' const date = dateFormat(x.messageId, format) if (date !== prevDate) { entries.push(<Divider key={ date } content={ date } />) prevDate = date } entries.push( <MessageEntry key={ x.messageId } time={ x.messageId } message={ x.message } alignRight={ x.creatorName == connectedUsername } sender={ x.displayName ? x.displayName : x.creatorName } /> ) }) let hasMoreDiv = (<div className={ styles.moreMessage }>Retrieving more messages</div>) return ( <div className={ styles.messageListBody } ref={ x => this.container = x } > { hasMoreMessage ? hasMoreDiv : '' } { entries } </div> ) } } export default MessageListBody