mirror of
https://github.com/scratchfoundation/scratch-www.git
synced 2025-01-08 05:22:16 -05:00
86 lines
2.5 KiB
React
86 lines
2.5 KiB
React
|
const React = require('react');
|
||
|
const PropTypes = require('prop-types');
|
||
|
const bindAll = require('lodash.bindall');
|
||
|
const classNames = require('classnames');
|
||
|
|
||
|
const FlexRow = require('../../../components/flex-row/flex-row.jsx');
|
||
|
const Comment = require('./comment.jsx');
|
||
|
|
||
|
require('./comment.scss');
|
||
|
|
||
|
class TopLevelComment extends React.Component {
|
||
|
constructor (props) {
|
||
|
super(props);
|
||
|
bindAll(this, [
|
||
|
'handleExpandThread'
|
||
|
]);
|
||
|
this.state = {
|
||
|
expanded: false
|
||
|
};
|
||
|
}
|
||
|
|
||
|
handleExpandThread () {
|
||
|
this.setState({
|
||
|
expanded: true
|
||
|
});
|
||
|
}
|
||
|
|
||
|
render () {
|
||
|
const {
|
||
|
author,
|
||
|
content,
|
||
|
datetimeCreated,
|
||
|
id,
|
||
|
replies
|
||
|
} = this.props;
|
||
|
|
||
|
return (
|
||
|
<FlexRow className="comment-container">
|
||
|
<Comment {...{author, content, datetimeCreated, id}} />
|
||
|
{replies.length > 0 &&
|
||
|
<FlexRow
|
||
|
className={classNames(
|
||
|
'replies',
|
||
|
'column',
|
||
|
{collapsed: !this.state.expanded && replies.length > 3}
|
||
|
)}
|
||
|
key={id}
|
||
|
>
|
||
|
{(this.state.expanded ? replies : replies.slice(0, 3)).map(reply => (
|
||
|
<Comment
|
||
|
author={reply.author}
|
||
|
content={reply.content}
|
||
|
datetimeCreated={reply.datetime_created}
|
||
|
id={reply.id}
|
||
|
key={reply.id}
|
||
|
/>
|
||
|
))}
|
||
|
</FlexRow>
|
||
|
}
|
||
|
{!this.state.expanded && replies.length > 3 &&
|
||
|
<a
|
||
|
className="expand-thread"
|
||
|
onClick={this.handleExpandThread}
|
||
|
>See all {replies.length} replies</a>
|
||
|
}
|
||
|
</FlexRow>
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TopLevelComment.propTypes = {
|
||
|
author: PropTypes.shape({
|
||
|
id: PropTypes.number,
|
||
|
image: PropTypes.string,
|
||
|
username: PropTypes.string
|
||
|
}),
|
||
|
content: PropTypes.string,
|
||
|
datetimeCreated: PropTypes.string,
|
||
|
id: PropTypes.number,
|
||
|
parentId: PropTypes.number,
|
||
|
projectId: PropTypes.string,
|
||
|
replies: PropTypes.arrayOf(PropTypes.object)
|
||
|
};
|
||
|
|
||
|
module.exports = TopLevelComment;
|