Show the username of the person being replied to in a comment on preview

This commit is contained in:
Paul Kaplan 2018-10-18 10:11:51 -04:00
parent 505dda09ae
commit d982d2d723
2 changed files with 26 additions and 1 deletions

View file

@ -93,6 +93,7 @@ class Comment extends React.Component {
datetimeCreated,
id,
projectId,
replyUsername,
visibility
} = this.props;
@ -160,7 +161,13 @@ class Comment extends React.Component {
* @user links in replies
* links to scratch.mit.edu pages
*/}
<span className="comment-content">{content}</span>
<span className="comment-content">
{replyUsername && (
<a href={`/users/${replyUsername}`}>@{replyUsername}&nbsp;</a>
)}
{content}
</span>
<FlexRow className="comment-bottom-row">
<span className="comment-time">
<FormattedRelative value={new Date(datetimeCreated)} />
@ -228,6 +235,7 @@ Comment.propTypes = {
onReport: PropTypes.func,
onRestore: PropTypes.func,
projectId: PropTypes.string,
replyUsername: PropTypes.string,
visibility: PropTypes.string
};

View file

@ -22,6 +22,9 @@ class TopLevelComment extends React.Component {
this.state = {
expanded: false
};
// A cache of {commentId: username, ...} in order to show reply usernames
this.commentUsernameCache = {};
}
handleExpandThread () {
@ -50,6 +53,19 @@ class TopLevelComment extends React.Component {
this.props.onAddComment(comment, this.props.id);
}
commentUsername (parentId) {
if (this.commentUsernameCache[parentId]) return this.commentUsernameCache[parentId];
// If the cache misses, rebuild it. Every reply has a parent id that is
// either a reply to this top level comment or to one of the replies.
this.commentUsernameCache[this.props.id] = this.props.author.username;
const replies = this.props.replies;
for (let i = 0; i < replies.length; i++) {
this.commentUsernameCache[replies[i].id] = replies[i].author.username;
}
return this.commentUsernameCache[parentId];
}
render () {
const {
author,
@ -111,6 +127,7 @@ class TopLevelComment extends React.Component {
id={reply.id}
key={reply.id}
projectId={projectId}
replyUsername={this.commentUsername(reply.parent_id)}
visibility={reply.visibility}
onAddComment={this.handleAddComment}
onDelete={this.handleDeleteReply}