通用评论

1
  1. {"version":3,"sources":["../../../src/components/ContentItem/index.js"],"names":["dayjs","locale","extend","relativeTime","CommentItem","props","state","showInput","handleToggleInput","bind","renderTextWithReply","setState","text","content","newText","reply","user_id","user_name","commentId","replyId","action","showReply","onShowReply","app","user_avatar","avatar","marginLeft","created","format","fromNow","__html","reply_count","sReplyFavor","id","favored","sCommentFavor","favor_count","children","Component","propTypes","PropTypes","object","isRequired","oneOf","func","defaultProps"],"mappings":"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","file":"index.js","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Avatar, Icon, Tooltip } from 'antd';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/zh-cn';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport Comment from '../../Comment';\nimport CommentInput from '../CommentInput';\nimport avatar from '../../avatar';\nimport { renderContent } from '../../helper';\nimport './index.css';\n\ndayjs.locale('zh-cn');\ndayjs.extend(relativeTime);\n\nclass CommentItem extends Component {\n constructor(props) {\n super(props);\n this.state = {\n showInput: false,\n };\n this.handleToggleInput = this.handleToggleInput.bind(this);\n this.renderTextWithReply = this.renderTextWithReply.bind(this);\n }\n\n handleToggleInput() {\n this.setState({ showInput: !this.state.showInput });\n }\n\n renderTextWithReply(text, content) {\n let newText = text;\n const { reply } = content;\n if (reply) {\n newText = `${newText} //@<a href=\"/${reply.user_id}\">${\n reply.user_name\n }</a> ${reply.content}`;\n if (reply.reply) {\n return this.renderTextWithReply(newText, reply);\n }\n }\n return newText;\n }\n\n render() {\n const {\n commentId,\n replyId,\n content,\n action,\n showReply,\n onShowReply,\n app,\n } = this.props;\n\n const { showInput } = this.state;\n\n return (\n <div className=\"comment-item-box\">\n <div className=\"comment-item-left\">\n <Avatar src={content.user_avatar || avatar} size=\"large\" />\n </div>\n <div className=\"comment-item-right\">\n <div>\n <a href={`/${content.user_id}`}>\n {content.user_name || '暂无昵称'}\n </a>\n\n <span style={{ marginLeft: 10 }}>\n <Tooltip\n placement=\"top\"\n title={dayjs(content.created * 1000).format(\n 'YYYY-MM-DD HH:mm:ss'\n )}\n >\n {dayjs(content.created * 1000).fromNow()}\n </Tooltip>\n </span>\n </div>\n <div\n className=\"comment-item-content\"\n dangerouslySetInnerHTML={{\n __html: renderContent(\n this.renderTextWithReply(content.content, content)\n ),\n }}\n />\n <div className=\"comment-item-bottom\">\n {content.reply_count ? (\n <div>\n <a className=\"comment-item-bottom-left\" onClick={onShowReply}>\n {content.reply_count} 条回复\n {showReply ? <Icon type=\"up\" /> : <Icon type=\"down\" />}\n </a>\n </div>\n ) : null}\n\n <a\n onClick={this.handleToggleInput}\n className=\"comment-item-bottom-right\"\n >\n &nbsp; 回复\n </a>\n <div\n className=\"comment-item-bottom-right\"\n onClick={() => {\n if (replyId) {\n // 如果有 replyId,则说明是评论的回复\n app.sReplyFavor(content.id, commentId, content.favored);\n return;\n }\n app.sCommentFavor(content.id, content.favored);\n }}\n >\n <Icon\n type=\"like-o\"\n className={\n content.favored\n ? 'comment-favor comment-favored'\n : 'comment-favor'\n }\n />\n &nbsp;{content.favor_count}\n </div>\n </div>\n </div>\n\n {showInput && (\n <CommentInput\n content={app.children}\n action={action}\n replyId={replyId}\n commentId={commentId}\n callback={this.handleToggleInput}\n />\n )}\n </div>\n );\n }\n}\n\nCommentItem.propTypes = {\n content: PropTypes.object.isRequired,\n // comment 评论\n // reply 评论的回复\n // replyToReply 回复的回复\n action: PropTypes.oneOf(['comment', 'reply', 'replyToReply']),\n onShowReply: PropTypes.func,\n};\n\nCommentItem.defaultProps = {\n action: 'comment',\n onShowReply: () => {},\n};\n\nexport default Comment(CommentItem);\n"]}