{"version":3,"sources":["../src/App.js"],"names":["App","props","state","loading","oss","list","page","total","isNoMoreComment","handleChangeLoading","bind","sGetComment","sGetReply","sCreateComment","sCreateReply","sCommentFavor","sReplyFavor","sOssSts","key","value","setState","API","type","businessId","axios","get","LIMIT","then","response","data","newList","oldList","filter","o","isTemporary","concat","info","catch","error","msg","lang","ERROR_DEFAULT","message","finally","commentId","map","item","id","replies","reply_count","reply_page","isNoMoreReply","content","method","business_id","withCredentials","success","unshift","cb","console","log","comment_id","push","favored","favor_count","replyId","showHeader","marginBottom","showEditor","children","showList","marginTop","Component","propTypes","PropTypes","number","isRequired","string","bool","defaultProps","Editor"],"mappings":"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","file":"App.js","sourcesContent":["import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { message, Tag } from \"antd\";\nimport axios from \"./axios\";\nimport { ERROR_DEFAULT, LIMIT } from \"./constant\";\nimport { CommentContext } from \"./Comment\";\nimport { isFunction } from \"./helper\";\nimport CommentInput from \"./components/CommentInput\";\nimport CommentList from \"./components/CommentList\";\nimport Editor from \"./components/Editor\";\nimport lang from \"./lang\";\nimport \"./App.css\";\n\nclass App extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      loading: {},\n\n      // oss 配置\n      oss: {},\n\n      // 评论数据\n      list: [],\n      page: 1,\n      total: 0,\n      // 是否没有更多评论了\n      isNoMoreComment: false\n    };\n    this.handleChangeLoading = this.handleChangeLoading.bind(this);\n    this.sGetComment = this.sGetComment.bind(this);\n    this.sGetReply = this.sGetReply.bind(this);\n    this.sCreateComment = this.sCreateComment.bind(this);\n    this.sCreateReply = this.sCreateReply.bind(this);\n    this.sCommentFavor = this.sCommentFavor.bind(this);\n    this.sReplyFavor = this.sReplyFavor.bind(this);\n    this.sOssSts = this.sOssSts.bind(this);\n  }\n\n  componentDidMount() {}\n\n  /**\n   * 改变 loading 状态\n   * @param {string} key key\n   * @param {string} value value\n   */\n  handleChangeLoading(key, value) {\n    const { loading } = this.state;\n    loading[key] = value;\n    this.setState({ loading });\n  }\n\n  /**\n   * 获取评论列表\n   */\n  sGetComment({ page = 1 } = {}) {\n    this.handleChangeLoading(\"sGetComment\", true);\n    const { API, type, businessId } = this.props;\n    axios\n      .get(\n        `${API}/comments?type=${type}&business_id=${businessId}&page=${page}&limit=${LIMIT}`\n      )\n      .then(response => {\n        const { list, page, total } = response.data;\n        if (list) {\n          let newList = list;\n          if (page > 1) {\n            let { list: oldList } = this.state;\n            // 删除临时数据\n            oldList = oldList.filter(o => !o.isTemporary);\n            newList = oldList.concat(newList);\n          }\n          this.setState({\n            list: newList,\n            page,\n            total\n          });\n        } else {\n          message.info(\"没有更多评论了\");\n          this.setState({\n            isNoMoreComment: true\n          });\n        }\n      })\n      .catch(error => {\n        if (error.response && error.response.data && error.response.data.msg) {\n          message.error(lang[error.response.data.msg] || ERROR_DEFAULT);\n          return;\n        }\n        message.error(lang[error.message] || ERROR_DEFAULT);\n      })\n      .finally(() => {\n        this.handleChangeLoading(\"sGetComment\", false);\n      });\n  }\n\n  /**\n   * 获取更多回复\n   */\n  sGetReply({ commentId, page = 1 } = {}) {\n    this.handleChangeLoading(\"sGetReply\", true);\n    const { API } = this.props;\n    axios\n      .get(`${API}/replies?comment_id=${commentId}&page=${page}&limit=${LIMIT}`)\n      .then(response => {\n        if (!response.data.list) {\n          message.info(\"没有更多数据了!\");\n        }\n        const list = this.state.list.map(item => {\n          if (item.id === commentId) {\n            if (!item.replies) item.replies = [];\n            if (response.data.list) {\n              if (page === 1) {\n                // 如果当前页数为第一页,则清空当前所有的 replies\n                // 并将获取到的 replies 存放在 state\n                item.replies = response.data.list;\n              } else {\n                item.replies = item.replies\n                  .filter(o => !o.isTemporary)\n                  .concat(response.data.list);\n                // 如果当前页数非第一页,则合并 replies\n              }\n              item.reply_count = response.data.total;\n              item.reply_page = response.data.page;\n            } else {\n              item.isNoMoreReply = true;\n            }\n          }\n          return item;\n        });\n        this.setState({ list });\n      })\n      .catch(error => {\n        if (error.response && error.response.data && error.response.data.msg) {\n          message.error(lang[error.response.data.msg] || ERROR_DEFAULT);\n          return;\n        }\n        message.error(lang[error.message] || ERROR_DEFAULT);\n      })\n      .finally(() => {\n        this.handleChangeLoading(\"sGetReply\", false);\n      });\n  }\n\n  /**\n   * 添加评论\n   * @param {object} {content} comment content\n   */\n  sCreateComment({ content } = {}) {\n    if (!content) return message.error(\"评论内容不能为空 \");\n    this.handleChangeLoading(\"sCreateComment\", true);\n    const { API, type, businessId } = this.props;\n    axios(`${API}/comments`, {\n      method: \"post\",\n      data: {\n        type,\n        business_id: businessId,\n        content\n      },\n      withCredentials: true\n    })\n      .then(response => {\n        message.success(\"评论成功!\");\n        // 将数据写入到 list 中\n        // 临时插入\n        // 等到获取数据之后,删除临时数据\n        const { list, total } = this.state;\n        list.unshift({\n          ...response.data,\n          isTemporary: true // 临时的数据\n        });\n        this.setState({ list, total: total + 1 });\n      })\n      .catch(error => {\n        if (error.response && error.response.data && error.response.data.msg) {\n          message.error(lang[error.response.data.msg] || ERROR_DEFAULT);\n          return;\n        }\n        message.error(lang[error.message] || ERROR_DEFAULT);\n      })\n      .finally(() => {\n        this.handleChangeLoading(\"sCreateComment\", false);\n      });\n  }\n\n  /**\n   * 添加回复\n   * 回复评论/回复回复\n   * @param {object} data { comment_id, content, [reply_id] }\n   */\n  sCreateReply(data, cb) {\n    console.log(\"list: \", this.state.list);\n\n    if (!data.content) return message.error(\"回复内容不能为空 \");\n    this.handleChangeLoading(\"sCreateReply\", true);\n    const { API } = this.props;\n    axios(`${API}/replies`, {\n      method: \"post\",\n      data,\n      withCredentials: true\n    })\n      .then(response => {\n        message.success(\"回复成功!\");\n        if (isFunction(cb)) cb();\n        // 将数据写入到 list 中\n        // 临时插入\n        // 等到获取数据之后,删除临时数据\n        const list = this.state.list.map(item => {\n          if (item.id === data.comment_id) {\n            if (!item.replies) item.replies = [];\n            item.replies.push({\n              ...response.data,\n              isTemporary: true // 临时的数据\n            });\n            item.reply_count += 1;\n          }\n          return item;\n        });\n        this.setState({ list });\n      })\n      .catch(error => {\n        if (error.response && error.response.data && error.response.data.msg) {\n          message.error(lang[error.response.data.msg] || ERROR_DEFAULT);\n          return;\n        }\n        message.error(lang[error.message] || ERROR_DEFAULT);\n      })\n      .finally(() => {\n        this.handleChangeLoading(\"sCreateReply\", false);\n      });\n  }\n\n  /**\n   * 评论 点赞/取消点赞\n   * @param {string} commentId { commentId }\n   * @param {boolean} favored   是否已经点过赞\n   */\n  sCommentFavor(commentId, favored) {\n    this.handleChangeLoading(\"sCommentFavor\", true);\n    const { API } = this.props;\n    axios(`${API}/comments/${commentId}/favor`, {\n      method: favored ? \"delete\" : \"put\",\n      withCredentials: true\n    })\n      .then(response => {\n        message.success(favored ? \"取消点赞成功!\" : \"点赞成功!\");\n        // 更新 list 中的该项数据的 favored\n        const list = this.state.list.map(item => {\n          if (item.id === commentId) {\n            item.favored = !favored;\n            item.favor_count += favored ? -1 : 1;\n          }\n          return item;\n        });\n        this.setState({ list });\n      })\n      .catch(error => {\n        if (error.response && error.response.data && error.response.data.msg) {\n          message.error(lang[error.response.data.msg] || ERROR_DEFAULT);\n          return;\n        }\n        message.error(lang[error.message] || ERROR_DEFAULT);\n      })\n      .finally(() => {\n        this.handleChangeLoading(\"sCommentFavor\", false);\n      });\n  }\n\n  /**\n   * 回复 点赞/取消点赞\n   * @param {string} replyId  replyId\n   * @param {string} commentId  commentId\n   * @param {boolean} favored   是否已经点过赞\n   */\n  sReplyFavor(replyId, commentId, favored) {\n    this.handleChangeLoading(\"sReplyFavor\", true);\n    console.log(\"replyId, commentId \", replyId, commentId);\n\n    const { API } = this.props;\n    axios(`${API}/replies/${replyId}/favor`, {\n      method: favored ? \"delete\" : \"put\",\n      withCredentials: true\n    })\n      .then(response => {\n        console.log(\"response: \", response);\n\n        message.success(favored ? \"取消点赞成功!\" : \"点赞成功!\");\n        // TODO: (2018.07.20 node) 对评论的回复点赞,报错\n        // // 更新 list 中的该项数据的 favored\n        // const list = this.state.list.map(item => {\n        //   if (item.id === replyId) {\n        //     item.favored = !favored;\n        //     item.favor_count += favored ? -1 : 1;\n        //   }\n        //   return item;\n        // });\n        // this.setState({ list });\n      })\n      .catch(error => {\n        if (error.response && error.response.data && error.response.data.msg) {\n          message.error(lang[error.response.data.msg] || ERROR_DEFAULT);\n          return;\n        }\n        message.error(lang[error.message] || ERROR_DEFAULT);\n      })\n      .finally(() => {\n        this.handleChangeLoading(\"sReplyFavor\", false);\n      });\n  }\n\n  /**\n   * 获取 OSS 上传的参数\n   */\n  sOssSts() {\n    this.handleChangeLoading(\"sOssSts\", true);\n    const { API } = this.props;\n    axios\n      .get(`${API}/oss/sts`)\n      .then(response => {\n        this.setState({ oss: { ...response.data } });\n      })\n      .catch(error => {\n        if (error.response && error.response.data && error.response.data.msg) {\n          message.error(lang[error.response.data.msg] || ERROR_DEFAULT);\n          return;\n        }\n        message.error(lang[error.message] || ERROR_DEFAULT);\n      })\n      .finally(() => {\n        this.handleChangeLoading(\"sOssSts\", false);\n      });\n  }\n\n  render() {\n    // 添加到 Context 的数据\n    const value = {\n      ...this.state,\n      ...this.props,\n      sCreateComment: this.sCreateComment,\n      sGetComment: this.sGetComment,\n      sCommentFavor: this.sCommentFavor,\n      sReplyFavor: this.sReplyFavor,\n      sCreateReply: this.sCreateReply,\n      sGetReply: this.sGetReply,\n      sOssSts: this.sOssSts\n    };\n\n    return (\n      <CommentContext.Provider value={value}>\n        <div className=\"comment\">\n          {this.props.showHeader && (\n            <div style={{ marginBottom: 15 }}>\n              <Tag className=\"comment-header-tag\">留言</Tag>\n              <span className=\"comment-header-tip\">口碑</span>\n              <span className=\"comment-header-text\">\n                (全站挑出毛病或提出合理建议,奖励10到100元红包)\n              </span>\n            </div>\n          )}\n          {this.props.showEditor && (\n            <CommentInput content={this.props.children} />\n          )}\n          {this.props.showList && (\n            <div style={{ marginTop: 20 }}>\n              <CommentList />\n            </div>\n          )}\n        </div>\n      </CommentContext.Provider>\n    );\n  }\n}\n\nApp.propTypes = {\n  type: PropTypes.number.isRequired, // 评论的 type\n  businessId: PropTypes.string.isRequired, // 评论的 business_id\n  API: PropTypes.string, // 评论的 API 前缀\n  showList: PropTypes.bool, // 是否显示评论列表\n  showEditor: PropTypes.bool, // 是否显示评论输入框\n  showHeader: PropTypes.bool // 是否显示评论顶部的提示\n};\n\nApp.defaultProps = {\n  API: \"http://api.links123.net/comment/v1\",\n  showList: true,\n  showEditor: true,\n  showHeader: true\n};\n\nexport { Editor };\n\nexport default App;\n"]}