{"version":3,"sources":["../src/App.js"],"names":["App","props","state","loading","oss","list","page","total","isNoMoreComment","initDone","locale","handleChangeLoading","bind","sCreateComment","sDeleteComment","sCommentFavor","sCreateReply","sDeleteReply","errorHandler","sGetComment","sReplyFavor","sGetReply","sOssSts","axios","defaults","withCredentials","token","headers","common","loadLocales","currentLocale","locales","cookieLang","Cookies","get","intl","determineLocale","urlLocaleKey","SUPPORT_LOCALES","find","item","value","version","require","hash","languageURL","LANGUAGE_LINK","fetch","then","response","status","Error","json","init","data","setState","msg","info","showError","error","onError","localResponse","LOCALES_RESPONSE","ERROR_DEFAULT","key","pageType","API","type","businessId","limit","newList","oldList","filter","o","isTemporary","concat","window","scrollTo","onCountChange","catch","finally","commentId","map","id","replies","reply_count","reply_page","isNoMoreReply","content","cb","businessUserId","method","business_id","business_user_id","showAlertComment","success","unshift","res","onDelete","COMMENT_TYPE","COMMENT","showAlertReply","comment_id","push","replyId","REPLY","favored","showAlertFavor","favor_count","r","showEditor","children","showList","marginTop","Component","propTypes","PropTypes","number","isRequired","string","bool","func","userId","onPageChange","onGetMoreBtnClick","defaultProps","LIMIT","Editor","RenderText"],"mappings":"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","file":"App.js","sourcesContent":["import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { message } from \"antd\";\nimport axios from \"axios\";\nimport Cookies from \"js-cookie\";\nimport intl from \"react-intl-universal\";\nimport { ERROR_DEFAULT, LIMIT, COMMENT_TYPE, LANGUAGE_LINK } 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 RenderText from \"./components/RenderText\";\nimport { SUPPORT_LOCALES, LOCALES_RESPONSE } 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      initDone: false,\n      locale: \"zh-CN\"\n    };\n    this.handleChangeLoading = this.handleChangeLoading.bind(this);\n    this.sCreateComment = this.sCreateComment.bind(this);\n    this.sDeleteComment = this.sDeleteComment.bind(this);\n    this.sCommentFavor = this.sCommentFavor.bind(this);\n    this.sCreateReply = this.sCreateReply.bind(this);\n    this.sDeleteReply = this.sDeleteReply.bind(this);\n    this.errorHandler = this.errorHandler.bind(this);\n    this.sGetComment = this.sGetComment.bind(this);\n    this.sReplyFavor = this.sReplyFavor.bind(this);\n    this.sGetReply = this.sGetReply.bind(this);\n    this.sOssSts = this.sOssSts.bind(this);\n  }\n\n  componentWillMount() {\n    this.axios = axios;\n    this.axios.defaults.withCredentials = true;\n    if (this.props.token) {\n      this.axios.defaults.headers.common[\"Authorization\"] = `Bearer ${\n        this.props.token\n      }`;\n    }\n  }\n\n  componentDidMount() {\n    this.loadLocales();\n  }\n\n  /**\n   * 加载语言包\n   * 只能根据url或者传入的props来确定加载哪个语言包\n   * 优先级:传入的props > url\n   */\n  loadLocales() {\n    let { locales: currentLocale } = this.props;\n    const cookieLang = Cookies.get(\"lnk_lang\");\n    if (!currentLocale) {\n      currentLocale =\n        cookieLang ||\n        intl.determineLocale({\n          urlLocaleKey: \"lang\"\n        });\n    }\n    currentLocale = SUPPORT_LOCALES.find(item => item.value === currentLocale)\n      ? currentLocale\n      : \"zh-CN\";\n    const version = require(\"./version.json\").hash;\n    // 使用绝对路径\n    const languageURL = `${LANGUAGE_LINK}/${currentLocale}.json?v=${version}`;\n    return fetch(languageURL)\n      .then(response => {\n        if (response.status >= 400) {\n          throw new Error(\"Bad response from server\");\n        }\n        return response.json();\n      })\n      .then(data => {\n        // console.log('data: ', data);\n        intl\n          .init({\n            currentLocale,\n            locales: {\n              [currentLocale]: data\n            }\n          })\n          .then(() => {\n            this.setState({ initDone: true, locale: currentLocale });\n          });\n      });\n  }\n\n  error(msg, info = {}) {\n    if (this.props.showError) {\n      message.error(msg);\n    }\n    if (this.props.onError) {\n      this.props.onError(msg, info);\n    }\n  }\n\n  errorHandler(error) {\n    const { locale } = this.state;\n    const localResponse = LOCALES_RESPONSE[locale];\n    if (error.response && error.response.data && error.response.data.msg) {\n      this.error(localResponse[error.response.data.msg] || ERROR_DEFAULT, {\n        response: error.response\n      });\n      return;\n    }\n    this.error(localResponse[error.response.data.msg] || ERROR_DEFAULT, {\n      response: error.response\n    });\n  }\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    const { pageType } = this.props;\n    this.handleChangeLoading(\"sGetComment\", true);\n    const { API, type, businessId, limit } = this.props;\n    this.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          let { list: oldList } = this.state;\n          if (pageType === \"more\") {\n            if (page > 1) {\n              // 删除临时数据\n              oldList = oldList.filter(o => !o.isTemporary);\n              newList = oldList.concat(newList);\n            }\n          } else if (pageType === \"pagination\") {\n            // TODO 滚动到顶部\n            window.scrollTo(0, 0);\n          }\n\n          this.setState({\n            list: newList,\n            page,\n            total\n          });\n          this.props.onCountChange(total);\n        } else {\n          message.info(intl.get(\"message.noMoreComment\"));\n          this.setState({\n            isNoMoreComment: true\n          });\n        }\n      })\n      .catch(this.errorHandler)\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, limit } = this.props;\n    this.axios\n      .get(`${API}/replies?comment_id=${commentId}&page=${page}&limit=${limit}`)\n      .then(response => {\n        if (!response.data.list) {\n          message.info(intl.get(\"message.noMoreData\"));\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(this.errorHandler)\n      .finally(() => {\n        this.handleChangeLoading(\"sGetReply\", false);\n      });\n  }\n\n  /**\n   * 添加评论\n   * @param {object} {content} comment content\n   */\n  sCreateComment({ content } = {}, cb) {\n    if (!content) return this.error(intl.get(\"message.notNull\"));\n    this.handleChangeLoading(\"sCreateComment\", true);\n    const { API, type, businessId, businessUserId } = this.props;\n    this.axios(`${API}/comments`, {\n      method: \"post\",\n      data: {\n        type,\n        business_id: businessId,\n        business_user_id: businessUserId,\n        content\n      },\n      withCredentials: true\n    })\n      .then(response => {\n        if (this.props.showAlertComment) {\n          message.success(intl.get(\"message.success\"));\n        }\n        if (isFunction(cb)) cb();\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        this.props.onCountChange(total + 1);\n      })\n      .catch(this.errorHandler)\n      .finally(() => {\n        this.handleChangeLoading(\"sCreateComment\", false);\n      });\n  }\n\n  /**\n   * 删除评论\n   */\n  sDeleteComment(commentId) {\n    this.handleChangeLoading(\"sDeleteComment\", true);\n    const { API } = this.props;\n    this.axios(`${API}/comments/${commentId}`, {\n      method: \"delete\",\n      withCredentials: true\n    })\n      .then(() => {\n        const { list, total } = this.state;\n        const res = list.filter(item => item.id !== commentId);\n        this.setState({ list: res, total: total - 1 });\n        this.props.onDelete(COMMENT_TYPE.COMMENT);\n        this.props.onCountChange(total - 1);\n      })\n      .catch(this.errorHandler)\n      .finally(() => {\n        this.handleChangeLoading(\"sDeleteComment\", false);\n      });\n  }\n\n  /**\n   * 添加回复\n   * 回复评论/回复回复\n   * @param {object} data { comment_id, content, [reply_id] }\n   */\n  sCreateReply(data, cb) {\n    if (!data.content) return this.error(intl.get(\"message.replyNoNull\"));\n    this.handleChangeLoading(\"sCreateReply\", true);\n    const { API } = this.props;\n    this.axios(`${API}/replies`, {\n      method: \"post\",\n      data,\n      withCredentials: true\n    })\n      .then(response => {\n        if (this.props.showAlertReply) {\n          message.success(intl.get(\"message.replySuccess\"));\n        }\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(this.errorHandler)\n      .finally(() => {\n        this.handleChangeLoading(\"sCreateReply\", false);\n      });\n  }\n\n  /**\n   * 删除回复\n   * @param {*} replyId\n   * @param {*} commentId\n   */\n  sDeleteReply(replyId, commentId) {\n    this.handleChangeLoading(\"sDeleteReply\", true);\n    const { API } = this.props;\n    this.axios(`${API}/replies/${replyId}?CommentID=${commentId}`, {\n      method: \"delete\",\n      withCredentials: true\n    })\n      .then(() => {\n        const list = this.state.list.map(item => {\n          if (item.id === commentId) {\n            const replies = item.replies.filter(item => item.id !== replyId);\n            item.replies = replies;\n            item.reply_count -= 1;\n          }\n          return item;\n        });\n        this.setState({ list });\n        this.props.onDelete(COMMENT_TYPE.REPLY);\n      })\n      .catch(this.errorHandler)\n      .finally(() => {\n        this.handleChangeLoading(\"sDeleteReply\", 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    this.axios(`${API}/comments/${commentId}/favor`, {\n      method: favored ? \"delete\" : \"put\",\n      withCredentials: true\n    })\n      .then(response => {\n        if (this.props.showAlertFavor) {\n          message.success(\n            favored\n              ? intl.get(\"message.cancelLickSuccess\")\n              : intl.get(\"message.likeSuccess\")\n          );\n        }\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(this.errorHandler)\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    const { API } = this.props;\n    this.axios(`${API}/replies/${replyId}/favor`, {\n      method: favored ? \"delete\" : \"put\",\n      data: {\n        comment_id: commentId\n      },\n      withCredentials: true\n    })\n      .then(response => {\n        message.success(\n          favored\n            ? intl.get(\"message.cancelLickSuccess\")\n            : intl.get(\"message.likeSuccess\")\n        );\n        // 更新 list 中的该项数据的 favored\n        const list = this.state.list.map(item => {\n          if (item.id === commentId) {\n            item.replies = item.replies.map(r => {\n              if (r.id === replyId) {\n                r.favored = !favored;\n                // r.favor_count =  response.data.favor_count;\n                // 点赞数 +1,而不是使用后端返回的点赞数\n                // 不然如果返回的不是增加 1,用户可能以为程序错误\n                r.favor_count += favored ? -1 : 1;\n              }\n              return r;\n            });\n          }\n          return item;\n        });\n        this.setState({ list });\n      })\n      .catch(this.errorHandler)\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    this.axios\n      .get(`${API}/oss/sts`)\n      .then(response => {\n        this.setState({ oss: { ...response.data } });\n      })\n      .catch(this.errorHandler)\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      sDeleteComment: this.sDeleteComment,\n      sDeleteReply: this.sDeleteReply\n    };\n\n    return (\n      this.state.initDone && (\n        <CommentContext.Provider value={value}>\n          <div className=\"comment\">\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}\n\nApp.propTypes = {\n  type: PropTypes.number.isRequired, // 评论的 type\n  businessId: PropTypes.string.isRequired, // 评论的 business_id\n  businessUserId: PropTypes.number,\n  API: PropTypes.string, // 评论的 API 前缀\n  showList: PropTypes.bool, // 是否显示评论列表\n  showEditor: PropTypes.bool, // 是否显示评论输入框\n  showAlertComment: PropTypes.bool, // 评论成功之后,是否通过 Antd 的 Message 组件进行提示\n  showAlertReply: PropTypes.bool, // 回复成功之后,是否通过 Antd 的 Message 组件进行提示\n  showAlertFavor: PropTypes.bool, // 点赞/取消点赞成功之后,是否通过 Antd 的 Message 组件进行提示\n  showError: PropTypes.bool, // 是否使用Antd的Message组件提示错误信息\n  onError: PropTypes.func, // 错误回调, 出错了会被调用\n  userId: PropTypes.number, // 用户id, comment内部不维护用户id, 调用组件时传递过来, 目前用于判断是否显示删除按钮\n  pageType: PropTypes.string, // 分页类型\n  page: PropTypes.number, // 页码\n  limit: PropTypes.number, // 一次加载评论数量\n  onPageChange: PropTypes.func, // 页码变化回调\n  onGetMoreBtnClick: PropTypes.func, // 点击查看更多按钮回调\n  onDelete: PropTypes.func,\n  locales: PropTypes.string, //  传入的语言环境, en-US/zh-CN\n  onCountChange: PropTypes.func // 评论数量变更时的回调\n};\n\nApp.defaultProps = {\n  businessUserId: 0,\n  API: \"//api.links123.net/comment/v1\",\n  showList: true,\n  showEditor: true,\n  showAlertComment: false,\n  showAlertReply: false,\n  showAlertFavor: false,\n  showError: true,\n  pageType: \"more\",\n  limit: LIMIT,\n  onGetMoreBtnClick: () => {},\n  onPageChange: page => {},\n  onDelete: () => {},\n  onCountChange: () => {}\n};\n\nexport { Editor, RenderText };\n\nexport default App;\n"]}