You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.3 KiB
React
51 lines
1.3 KiB
React
4 years ago
|
import React from 'react';
|
||
|
import _ from 'lodash';
|
||
|
import { connect } from 'react-redux';
|
||
|
import 'jquery-scroll-lock';
|
||
|
|
||
|
import ListItem from './DialogueListItemComponent';
|
||
|
|
||
|
const mapStateToProps = (state) => ({
|
||
|
activeId: state.activeId,
|
||
|
dialogues: state.dialogues,
|
||
|
});
|
||
|
|
||
|
const mapDispatchToProps = (dispatch) => ({
|
||
|
handleClick(id) {
|
||
|
dispatch({
|
||
|
type: 'DIALOGUES_SWITCH_TO',
|
||
|
payload: id,
|
||
|
});
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export default connect(mapStateToProps, mapDispatchToProps)(class MessagePadDialogueListContainer extends React.PureComponent {
|
||
|
componentDidMount() {
|
||
|
$(this.refs.list).scrollLock({ strict: true });
|
||
|
}
|
||
|
|
||
|
render() {
|
||
|
const orderedDialogues = _.orderBy(
|
||
|
_.values(this.props.dialogues),
|
||
|
(dialogue) => (_.maxBy(dialogue.messages, '_id')
|
||
|
? _.maxBy(dialogue.messages, '_id')._id
|
||
|
: Number.POSITIVE_INFINITY),
|
||
|
'desc',
|
||
|
);
|
||
|
return (
|
||
|
<ol className="messagepad__list" ref="list">
|
||
|
{_.map(orderedDialogues, (dialogue) => (
|
||
|
<ListItem
|
||
|
key={dialogue._id}
|
||
|
userName={dialogue.udoc.uname}
|
||
|
summary={(_.last(dialogue.messages)?.content) || ''}
|
||
|
faceUrl={dialogue.udoc.gravatar}
|
||
|
active={dialogue._id === this.props.activeId}
|
||
|
onClick={() => this.props.handleClick(dialogue._id)}
|
||
|
/>
|
||
|
))}
|
||
|
</ol>
|
||
|
);
|
||
|
}
|
||
|
});
|