{"version":3,"sources":["../src/App.js"],"names":["LOCALES","CNdata","USdata","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","intl","determineLocale","urlLocaleKey","SUPPORT_LOCALES","find","item","value","init","then","setState","msg","info","showError","error","onError","localResponse","LOCALES_RESPONSE","response","data","ERROR_DEFAULT","key","pageType","API","type","businessId","get","LIMIT","newList","oldList","filter","o","isTemporary","concat","window","scrollTo","catch","finally","commentId","map","id","replies","reply_count","reply_page","isNoMoreReply","content","cb","method","business_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","defaultProps","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 intl from \"react-intl-universal\";\nimport { ERROR_DEFAULT, LIMIT, COMMENT_TYPE } 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 USdata from \"./lang/en-US.js\";\nimport CNdata from \"./lang/zh-CN.js\";\nimport \"./App.css\";\n\nconst LOCALES = {\n \"zh-CN\": CNdata,\n \"en-US\": USdata\n};\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 if (!currentLocale) {\n currentLocale = intl.determineLocale({\n urlLocaleKey: \"lang\"\n });\n }\n currentLocale = SUPPORT_LOCALES.find(item => item.value === currentLocale)\n ? currentLocale\n : \"zh-CN\";\n intl\n .init({\n currentLocale,\n locales: {\n [currentLocale]: LOCALES[currentLocale]\n }\n })\n .then(() => {\n this.setState({ initDone: true, locale: currentLocale });\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 } = 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 } 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 } = 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 } = this.props;\n this.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 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 })\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 })\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 \n
\n {this.props.showEditor && (\n \n )}\n {this.props.showList && (\n
\n \n
\n )}\n
\n
\n )\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 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 onPageChange: PropTypes.func, // 页码变化回调\n onDelete: PropTypes.func,\n locales: PropTypes.string, // 传入的语言环境, en-US/zh-CN\n};\n\nApp.defaultProps = {\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 onPageChange: page => {},\n onDelete: () => {}\n};\n\nexport { Editor, RenderText };\n\nexport default App;\n"]}