import React from 'react'; import PropTypes from 'prop-types'; import Comment from './PageComment/Comment'; /** * Load data of comments and render the list of * * @author Yuki Takei * * @export * @class PageComments * @extends {React.Component} */ export default class PageComments extends React.Component { constructor(props) { super(props); this.state = { currentComments: [], newerComments: [], olderComments: [], }; this.init = this.init.bind(this); } componentWillMount() { const pageId = this.props.pageId; if (pageId) { this.init(); } } init() { if (!this.props.pageId) { return ; } const pageId = this.props.pageId; const revisionId = this.props.revisionId; const revisionCreatedAt = this.props.revisionCreatedAt; this.props.crowi.apiGet('/comments.get', {page_id: pageId}) .then(res => { if (res.ok) { let currentComments = []; let newerComments = []; let olderComments = []; // divide by revisionId and createdAt res.comments.forEach((comment) => { if (comment.revision == revisionId) { currentComments.push(comment); } else if (Date.parse(comment.createdAt)/1000 > revisionCreatedAt) { newerComments.push(comment); } else { olderComments.push(comment); } }); this.setState({currentComments, newerComments, olderComments}); } }).catch(err => { }); } /** * generate Elements of Comment * * @param {any} comments Array of Comment Model Obj * * @memberOf PageComments */ generateCommentElements(comments) { return comments.map((comment) => { return ( ); }); } render() { let currentElements = this.generateCommentElements(this.state.currentComments); let newerElements = this.generateCommentElements(this.state.newerComments); let olderElements = this.generateCommentElements(this.state.olderComments); let toggleNewer = (newerElements.length === 0) ?
: ( Comments for Newer Revision ) let toggleOlder = (olderElements.length === 0) ?
: ( Comments for Older Revision ) return (
{newerElements}
{toggleNewer}
{currentElements}
{toggleOlder}
{olderElements}
); } } PageComments.propTypes = { pageId: PropTypes.string, revisionId: PropTypes.string, revisionCreatedAt: PropTypes.number, crowi: PropTypes.object.isRequired, };