{"version":3,"sources":["../../../src/components/ContentItem/index.js"],"names":["dayjs","extend","relativeTime","LOCALES","CommentItem","props","state","showInput","showPreviewer","previewerIndex","handleToggleInput","bind","renderTextWithReply","hidePreviewer","index","setState","text","content","newText","reply","user_name","commentId","replyId","action","showReply","onShowReply","app","locale","newContent","images","indexOf","IMAGE_SPLIT","split","pop","join","imageList","needClear","length","imgs","splice","type","IconColor","favor_count","backgroundImage","user_avatar","avatar","intl","get","marginLeft","created","format","fromNow","__html","map","item","i","reply_count","total","userId","user_id","sDeleteReply","id","sDeleteComment","sReplyFavor","favored","sCommentFavor","color","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, Popconfirm } from \"antd\";\nimport dayjs from \"dayjs\";\nimport \"dayjs/locale/zh-cn\";\n// import 'dayjs/locale/es';\nimport relativeTime from \"dayjs/plugin/relativeTime\";\nimport intl from \"react-intl-universal\";\nimport Comment from \"../../Comment\";\nimport CommentInput from \"../CommentInput\";\nimport avatar from \"../../avatar\";\nimport { renderContent } from \"../../helper\";\nimport { IMAGE_SPLIT } from \"../../constant\";\nimport \"./index.css\";\nimport ImagePreviewer from \"../ImagePreviewer/ImagePreviewer\";\n\n// dayjs.locale(\"zh-cn\");\ndayjs.extend(relativeTime);\n\nconst LOCALES = {\n  \"zh-CN\": \"zh-cn\"\n};\n\nclass CommentItem extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showInput: false,\n      showPreviewer: false,\n      previewerIndex: 0\n    };\n    this.handleToggleInput = this.handleToggleInput.bind(this);\n    this.renderTextWithReply = this.renderTextWithReply.bind(this);\n    this.showPreviewer = this.showPreviewer.bind(this);\n    this.hidePreviewer = this.hidePreviewer.bind(this);\n  }\n\n  showPreviewer(index) {\n    this.setState({\n      showPreviewer: true,\n      previewerIndex: index\n    });\n  }\n\n  hidePreviewer() {\n    this.setState({\n      showPreviewer: false\n    });\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      newText = `${newText} //@${reply.user_name} ${reply.content}`;\n      // newText = (\n      //   <span>\n      //     {newText}\n      //     @<a href={`/${reply.user_id}`}>{reply.user_name}</a>{reply.content}\n      //   </span>\n      // )\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 { locale } = this.props.app;\n    const { showInput } = this.state;\n\n    let newContent = content.content;\n    let images = \"\";\n    if (newContent.indexOf(IMAGE_SPLIT) !== -1) {\n      newContent = newContent.split(IMAGE_SPLIT);\n      images = newContent.pop();\n      newContent = newContent.join(\"\");\n    }\n\n    const imageList = images.split(\",\");\n\n    // 在3, 7前需要换行\n    const needClear =\n      imageList.length === 5 ||\n      imageList.length === 6 ||\n      imageList.length === 9;\n    const imgs = [...imageList];\n    if (needClear) {\n      if (imgs.length > 6) {\n        imgs.splice(3, 0, { type: \"divider\" });\n        imgs.splice(7, 0, { type: \"divider\" });\n      } else {\n        imgs.splice(3, 0, { type: \"divider\" });\n      }\n    }\n    const IconColor = content.favor_count > 0 ? \"#71C135\" : \"#4a90e2\";\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            className=\"comment-item-avatar\"\n            style={{\n              backgroundImage: `url(${content.user_avatar || avatar})`\n            }}\n          />\n        </div>\n        <div className=\"comment-item-right\">\n          <div>\n            {/* <a href={`/${content.user_id}`}>\n              {content.user_name || \"暂无昵称\"}\n            </a> */}\n            <strong>{content.user_name || intl.get(\"comment.tourist\")}</strong>\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                {LOCALES[locale]\n                  ? dayjs(content.created * 1000)\n                      .locale(LOCALES[locale])\n                      .fromNow()\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(newContent, content)\n              )\n            }}\n          />\n          {// image为空时不渲染comment-item-image\n          imageList.length > 0 && imageList[0] !== \"\" && (\n            <div className=\"comment-item-image\">\n              {!this.state.showPreviewer &&\n                imgs.map((item, index) => {\n                  if (item.type === \"divider\") {\n                    return (\n                      <div className=\"comment-item-image-wrapper\" key={index}>\n                        <div className=\"comment-img-divider\" />\n                        {/* <img src={item} alt={item} className=\"comment-img\" /> */}\n                      </div>\n                    );\n                  }\n                  return (\n                    <div\n                      className=\"comment-item-image-wrapper\"\n                      key={index}\n                      onClick={() => {\n                        let i = index;\n                        if (needClear) {\n                          if (index > 3) {\n                            i -= 1;\n                          }\n                          if (index > 7) {\n                            i -= 1;\n                          }\n                        }\n                        this.showPreviewer(i);\n                      }}\n                    >\n                      <div\n                        style={{ backgroundImage: `url(${item})` }}\n                        className=\"comment-img-thumbnail\"\n                      />\n                      {/* <img src={item} alt={item} className=\"comment-img\" /> */}\n                    </div>\n                  );\n                })}\n              {this.state.showPreviewer && (\n                <ImagePreviewer\n                  list={imageList}\n                  index={this.state.previewerIndex}\n                  onFold={this.hidePreviewer}\n                />\n              )}\n              <div className=\"clearfix\" />\n            </div>\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                  {intl.get(\"reply.totalReply\", { total: content.reply_count })}\n                  {showReply ? <Icon type=\"up\" /> : <Icon type=\"down\" />}\n                </a>\n              </div>\n            ) : null}\n            {app.userId === content.user_id && (\n              <Popconfirm\n                // title=\"确定要删除吗?\"\n                title={intl.get(\"popConfirm.title\")}\n                onConfirm={() => {\n                  if (replyId) {\n                    app.sDeleteReply(content.id, commentId);\n                    return;\n                  }\n                  app.sDeleteComment(content.id);\n                }}\n                okText={intl.get(\"popConfirm.ok\")}\n                cancelText={intl.get(\"popConfirm.cancel\")}\n              >\n                <a className=\"comment-item-bottom-right\">\n                  &nbsp; {intl.get(\"popConfirm.delete\")}\n                </a>\n              </Popconfirm>\n            )}\n            <a\n              onClick={this.handleToggleInput}\n              className=\"comment-item-bottom-right\"\n            >\n              &nbsp; {intl.get(\"comment.reply\")}\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              style={{ color: `${IconColor}` }}\n            >\n              <Icon\n                type=\"like-o\"\n                className={\n                  content.favored\n                    ? \"comment-favor comment-favored\"\n                    : \"comment-favor\"\n                }\n                style={{ color: `${IconColor}` }}\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            userId={content.user_id}\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"]}