diff --git a/public/react/src/modules/comment/CommentsHOC.js b/public/react/src/modules/comment/CommentsHOC.js index 4cdd852b4..cc5be1654 100644 --- a/public/react/src/modules/comment/CommentsHOC.js +++ b/public/react/src/modules/comment/CommentsHOC.js @@ -1,613 +1,625 @@ -import React from 'react' -import ReactDOM from 'react-dom' -import axios from 'axios' -import update from 'immutability-helper' - -import ImageLayer from '../page/layers/ImageLayer' - -const $ = window.$ -/* 需要的props: - shixun - id - myshixun - id - challenge - id - user - "image_url": user.image_url, - "username": user.username, - showSnackbar - - */ -/* - 这里提供props给WrappedComponent,用于封装特定的state和功能(评论列表) - 不要直接使用this.xxx调用WrappedComponent内的方法,尽量避免互相依赖,封装好后供不同场景使用(tpi、tpm) -*/ -export function commentHOC(WrappedComponent) { - // 这里如果extends WrappedComponent 会出现 WrappedComponent mount twice的问题 - return class II extends React.Component { - constructor(props) { - super(props) - - // ------------------------------------ - this.createNewComment = this.createNewComment.bind(this) - this.fetchCommentIfNotFetched = this.fetchCommentIfNotFetched.bind(this) - this.replyComment = this.replyComment.bind(this) - this.deleteComment = this.deleteComment.bind(this) - this.commentPraise = this.commentPraise.bind(this) - this.hiddenComment = this.hiddenComment.bind(this) - this.rewardCode = this.rewardCode.bind(this) - this.showNewReply = this.showNewReply.bind(this) - this.newMessage = this.newMessage.bind(this) - // ------------------------------------ - - this.onPaginationChange = this.onPaginationChange.bind(this) - - this.state = { - // 评论 - comments: [], - comment_count_without_reply: 0, - // 默认pageSize为10 - currentPage: 1, - loadingComments: true, - - // 图片最大化 - showImage: false, - imageSrc: '', - } - } - - // ----------------------------------------------------------------------------------------------评论 Start - - // ----------------------------------------------------------------------------------------------评论 Start - onPaginationChange(page) { - this.fetchComment(page) - this.setState({ - currentPage: page, - }); - } - /* - email: "1843820944@qq.com" - grade: 2138 - image_url: "avatar/User/36497" - login: "p24891375" - name: "杨俊男" - user_url: "/users/p24891375" -*/ - handleComments(comments, responseData) { - comments.forEach(element => { - if (element.children) { - this.handleComments(element.children, responseData) - } - element.admin = responseData.all - element.manager = element.manage - - element.username = element.author.name - element.user_login = element.author.login - element.image_url = element.author.image_url - element.user_id = element.author.user_id - - }); - } - responseDataParse(response) { - const comments = response.data.comments - this.handleComments(comments, response.data) - } - fetchComment(page = 1) { - const { challenge, shixun, match } = this.props; - // const url = `/api/v1/shixuns/${shixun.id}/shixun_discusses?page=${page-1}&container_type=Shixun` - const url = - `/discusses.json?page=${page-1}&container_identifier=${shixun && shixun.identifier ? - shixun.identifier : match.params.shixunId}&container_type=Shixun` - - this.setState({ - loadingComments: true, - }); - - // test - // if (true) { - if (false) { - var data = {"children_list":[{"id":1165,"content":"\u7535\u8111\u6ca1\u6709pi\u554a","time":"4\u5929\u524d","position":2,"user_id":31542,"reward":null,"image_url":"avatars/User/b","username":"\u8d75\u94f6\u7fd4","user_login":"p81572036","shixun_id":61,"hidden":false,"manager":false,"praise_count":0,"user_praise":false,"admin":false,"children":null},{"id":1142,"content":"\u6700\u540e\u4e00\u9898\u4e09\u5929\u6253\u9c7c\uff0c\u4e24\u5929\u6652\u7f51\uff0c\u4e0d\u5e94\u8be5\u662f1.01*1.01*1.01*0.99*0.99\uff0c\u800c\u4e0d\u662f\u52a0\u5417\uff1f","time":"4\u5929\u524d","position":1,"user_id":33714,"reward":null,"image_url":"avatars/User/b","username":"\u843d\u5c18","user_login":"p52769048","shixun_id":61,"hidden":false,"manager":false,"praise_count":0,"user_praise":false,"admin":false,"children":[{"content":"\u672c\u5173\u5e76\u6ca1\u6709\u5199\u5230\u201c1.01*1.01*1.01*0.99*0.99\u201d\uff0c\u4e0d\u77e5\u9053\u4f55\u6765\u6b64\u95ee\uff1f","time":"4\u5929\u524d","position":1,"reward":null,"image_url":"avatars/User/1","username":"Coder","user_id":1,"user_login":"innov","can_delete":false,"id":1144}]},{"id":1112,"content":"\u8fd9\u4e2a\u5b9e\u8bad\u5f88\u8d5e\uff01","time":"10\u5929\u524d","position":2,"user_id":12,"reward":null,"image_url":"avatars/User/12","username":"\u9ec4\u4e95\u6cc9","user_login":"Hjqreturn","shixun_id":61,"hidden":false,"manager":false,"praise_count":1,"user_praise":false,"admin":false,"children":null},{"id":1057,"content":"\u4e0d\u9519","time":"20\u5929\u524d","position":2,"user_id":30403,"reward":null,"image_url":"avatars/User/b","username":"Jimmy","user_login":"p69243850","shixun_id":61,"hidden":false,"manager":false,"praise_count":1,"user_praise":false,"admin":false,"children":null},{"id":975,"content":"q","time":"1\u4e2a\u6708\u524d","position":2,"user_id":30403,"reward":null,"image_url":"avatars/User/b","username":"Jimmy","user_login":"p69243850","shixun_id":61,"hidden":false,"manager":false,"praise_count":1,"user_praise":false,"admin":false,"children":[{"content":"\u4e0b\u6b21\u518d\u53d1\u65e0\u610f\u4e49\u7684\u5185\u5bb9\uff0c\u5c06\u88ab\u6263\u91d1\u5e01\u54e6","time":"1\u4e2a\u6708\u524d","position":2,"reward":null,"image_url":"avatars/User/1","username":"Coder","user_id":1,"user_login":"innov","can_delete":false,"id":980}]},{"id":974,"content":"k","time":"1\u4e2a\u6708\u524d","position":2,"user_id":30403,"reward":null,"image_url":"avatars/User/b","username":"Jimmy","user_login":"p69243850","shixun_id":61,"hidden":false,"manager":false,"praise_count":0,"user_praise":false,"admin":false,"children":[{"content":"\u4e0b\u6b21\u518d\u53d1\u65e0\u610f\u4e49\u7684\u5185\u5bb9\uff0c\u5c06\u88ab\u6263\u91d1\u5e01\u54e6","time":"1\u4e2a\u6708\u524d","position":2,"reward":null,"image_url":"avatars/User/1","username":"Coder","user_id":1,"user_login":"innov","can_delete":false,"id":981}]},{"id":859,"content":"\u5f88\u68d2\uff01\uff01\uff01","time":"1\u4e2a\u6708\u524d","position":4,"user_id":1,"reward":null,"image_url":"avatars/User/1","username":"Coder","user_login":"innov","shixun_id":61,"hidden":false,"manager":false,"praise_count":0,"user_praise":false,"admin":false,"children":null},{"id":802,"content":"\u4e0d\u9519\uff01","time":"2\u4e2a\u6708\u524d","position":1,"user_id":30403,"reward":null,"image_url":"avatars/User/b","username":"Jimmy","user_login":"p69243850","shixun_id":61,"hidden":false,"manager":false,"praise_count":1,"user_praise":false,"admin":false,"children":null},{"id":619,"content":"\u770b\u6765\u8001\u5e08\u5bf9\u9f50\u7528\u7684\u90fd\u662f\u7a7a\u683c","time":"5\u4e2a\u6708\u524d","position":3,"user_id":29145,"reward":null,"image_url":"avatars/User/b","username":"yang","user_login":"m02945638","shixun_id":61,"hidden":false,"manager":false,"praise_count":1,"user_praise":false,"admin":false,"children":null},{"id":553,"content":"
\r\n\t666\r\n
\r\n\r\n\t
\r\n
\n\t
\n<\/p>)*$/g,'');
- }
-
- axios.post(url, {
- container_type: "Shixun",
- container_id: shixun.id,
- challenge_id: challenge.id,
- content,
- position: challenge.position
- },
- {
- // withCredentials: true
- }
- ).then((response) => {
- if (response.data.discuss) {
-
- window._commentInput.html('');
- window._commentInput.afterBlur()
- // this.setState({
- // runTesting: false,
- // })
- this.fetchComment()
- }
- console.log(response)
- }).catch((error) => {
- console.log(error)
- })
- return true;
- }
- _findCommentById(id, arg_comments) {
- let comments;
- if (!arg_comments) {
- comments = this.state.comments;
- } else {
- comments = arg_comments;
- }
- for(let i = 0; i < comments.length; i++) {
- if (id === comments[i].id) {
- return i;
- }
- }
- }
- replyComment(commentContent, id, editor) {
- // http://localhost:3000/api/v1/discusses/812/reply
- const { challenge, shixun, user, showSnackbar, match } = this.props;
-
- if (!commentContent || commentContent.length === 0) {
- showSnackbar('必须填写内容!')
- return;
- }
- // const url = `/api/v1/discusses/${id}/reply`
- const url = `/discusses/${id}/reply.json`
- if (commentContent) {
- commentContent = commentContent.replace(/(\n
\n\t
\n<\/p>)*$/g,'');
- }
- if (!user.login && user.user_url) {
- const loginAr = user.user_url.split('/')
- user.login = loginAr[loginAr.length - 1]
- }
- axios.post(url, {
- content: commentContent,
- // TODO
- "container_id": match.params.shixunId,
- "container_type": "Shixun",
- },
- {
- // withCredentials: true
- }
- ).then((response) => {
- if (response.data.discuss) {
- let newDiscuss = response.data.discuss;
- let { comments } = this.state;
- var commentIndex = this._findCommentById(id);
- let comment = comments[commentIndex]
- comment = Object.assign({}, comment)
- if (!comment.children ) {
- comment.children = []
- } else {
- comment.children = comment.children.slice(0);
- }
- // TODO userName iamge_url
- comment.children.push( {
- "can_delete": true,
- "content": commentContent,
-
- "image_url": user.image_url,
- "username": user.username,
- "user_login": user.login,
- "id": newDiscuss.id,
- "position": newDiscuss.position,
- "time": "1分钟前",
- "praise_count": newDiscuss.praise_count,
-
- "user_id": newDiscuss.user_id,
-
- })
-
- comments = comments.slice(0)
- comments[commentIndex] = comment
-
- // ke
- editor.html && editor.html('')
- // md
- if (editor.setValue) {
- editor.setValue('')
- const $ = window.$
- var view_selector = `.commentItemMDEditorView_${id}`
- $(view_selector).hide();
- }
-
-
- this.setState({
- // runTesting: false,
- comments: comments
- }, ()=>{
- // keditor代码美化
- editor.html && window.prettyPrint()
- })
- }
- console.log(response)
- }).catch((error) => {
- console.log(error)
- })
- }
- hiddenComment(item, childCommentId) {
- const id = item.id
- const { challenge, shixun, user, showSnackbar, match } = this.props;
- // const url = `/api/v1/discusses/${id}/hidden`
- const url = `/discusses/${id}/hidden.json`
-
- const commentIndex = this._findCommentById(id);
- const { comments } = this.state;
- const comment = Object.assign({}, comments[commentIndex]);
- axios.post(url, {
- hidden: !comment.hidden ? "1" : "0",
- container_identifier: match.params.shixunId || shixun.identifier
- },
- {
- // withCredentials: true
- }
- ).then((response) => {
- if (response.data.status === -1) {
- showSnackbar(response.data.message)
- return;
- }
- if (response.data.status === 1) {
-
- if (!childCommentId) {
- comment.hidden = !comment.hidden;
- const commentsCopy = this.state.comments.slice(0)
- commentsCopy[commentIndex] = comment
- this.setState({
- comments: commentsCopy
- })
- } else { // TODO 目前子回复没hidden字段
- let childCommentIndex = this._findCommentById(childCommentId, comments[commentIndex].children);
- const childComment = comments[commentIndex].children[childCommentIndex]
- childComment.hidden = !childComment.hidden;
- this.setState({ comments })
- }
-
- }
- // {"message":"Couldn't find Discuss with id=911","status":-1}
- console.log(response)
- }).catch((error) => {
- console.log(error)
- })
- }
- deleteComment(parrentComment, childCommentId) {
- const { challenge, shixun } = this.props;
- let deleteCommentId = parrentComment.id
- if (childCommentId) {
- deleteCommentId = childCommentId;
- }
- // const url = `/api/v1/discusses/${deleteCommentId}`
- const url = `/discusses/${deleteCommentId}.json`
-
- axios.delete(url,
- {
- // withCredentials: true
- }
- ).then((response) => {
- // TODO 删除成功或失败
- if (response.data && response.data.status === 1) {
- const commentIndex = this._findCommentById(parrentComment.id);
-
- // https://stackoverflow.com/questions/29527385/removing-element-from-array-in-component-state
- if (!childCommentId) {
- this.setState((prevState) => ({
- comments: update(prevState.comments, {$splice: [[commentIndex, 1]]})
- }))
-
- if (this.state.comments.length <= 5) {
- this.fetchComment()
- }
- } else {
- let comments = this.state.comments;
- let newComments = Object.assign({}, comments)
- let childCommentIndex = this._findCommentById(childCommentId, newComments[commentIndex].children);
- newComments[commentIndex].children = update(newComments[commentIndex].children, {$splice: [[childCommentIndex, 1]]})
- this.setState({ newComments })
- }
- }
- console.log(response)
- }).catch((error) => {
- console.log(error)
- })
- }
-
- rewardCode(parrentComment, childComment, amount) {
- const { challenge, shixun, showSnackbar } = this.props;
- let handleComment = parrentComment
- if (childComment) {
- handleComment = childComment;
- }
- let handleCommentId = handleComment.id;
- // const url = `/api/v1/discusses/${handleCommentId}/reward_code`
- const url = `/discusses/${handleCommentId}/reward_code.json`
-
- axios.post(url, {
- // id: handleCommentId,
-
- // container_id: shixun.id,
- container_type: 'Discusses',
- score: amount,
- user_id: handleComment.user_id
- },
- {
- // withCredentials: true
- }
- ).then((response) => {
- if (response.data && response.data.code) {
- const commentIndex = this._findCommentById(parrentComment.id);
- let { comments } = this.state;
- const newComments = comments.slice(0)
-
- if (childComment) {
- const childCommentIndex = this._findCommentById(handleComment.id, parrentComment.children);
- const newChildComment = Object.assign({}, childComment);
- newChildComment.reward = response.data.code
- parrentComment = Object.assign({}, parrentComment)
- parrentComment.children = parrentComment.children.slice(0)
- parrentComment.children[childCommentIndex] = newChildComment
-
- newComments[commentIndex] = parrentComment;
-
-
- } else {
- const newComment = Object.assign({}, newComments[commentIndex]);
- newComment.reward = response.data.code;
- newComments[commentIndex] = newComment;
- }
- this.setState({
- comments: newComments
- })
- }
- }).catch((error) => {
- console.log(error)
- showSnackbar('奖励失败,请联系系统管理员!')
- })
- }
-
- // 评论点赞
- commentPraise(discussId) {
- const commentIndex = this._findCommentById(discussId);
- const { comments } = this.state;
-
- const { challenge } = this.props;
- // const url = `/api/v1/discusses/${discussId}/plus`
- const url = `/discusses/${discussId}/plus.json`
- axios.post(url, {
- // id: discussId,
- // container_id: challenge.id,
- container_type: 'Discuss', //Discuss
- type: comments[commentIndex].user_praise === true ? 0 : 1, // "踩0;赞1"
- },
- {
- // withCredentials: true
- }
- ).then((response) => {
- if (response.data.praise_count === 0 || response.data.praise_count) {
- const newComments = comments.slice(0)
- const comment = Object.assign({}, newComments[commentIndex])
- comment.user_praise = !comment.user_praise;
- comment.praise_count = response.data.praise_count;
- newComments[commentIndex] = comment;
- this.setState({
- comments: newComments
- })
- }
- console.log(response)
- }).catch((error) => {
- console.log(error)
- })
- }
-
- newMessage() {
- return; // newMessage 暂时不用了
- const { shixun, myshixun } = this.props;
- const url = `/api/v1/shixuns/${shixun.id}/new_message?container_type=Shixun&myshixun_id=${myshixun.id}`
- // this.setState({
- // gotNewReply: true
- // })
- axios.get(url,
- {
- // withCredentials: true
- }
- ).then((response) => {
- const new_message = response.data.new_message;
- if (response.data.new_message) {
- this.setState({
- gotNewReply: new_message
- })
- }
- // console.log(response)
- }).catch((error) => {
- console.log(error)
- })
- }
-
- showNewReply() {
- const { shixun, myshixun } = this.props;
- const commentId = 929 // TODO
- const url = `/api/v1/shixuns/${shixun.id}/anchor?container_type=Shixun&myshixun_id=${myshixun.id}&discuss_id=${commentId}`
-
- this.setState({
- loadingComments: true,
- gotNewReply: false,
-
- });
- axios.get(url,
- {
- // withCredentials: true
- }
- ).then((response) => {
- const data = response.data;
- const new_message = data.new_message;
-
- this.setState({
- comments: data.children_list,
- comment_count_without_reply: data.disscuss_count,
-
- currentPage: data.page,
- loadingComments: false,
-
- }, () => {
- if (response.data.find_status) { // 没找到评论的话,默认会返回第一页的评论
- const comment_J = window.$(`#reply_content_${commentId}`);
- if (comment_J.length) {
- comment_J[0].scrollIntoView()
- comment_J.parents('.comment_item_cont').css('border', '1px solid #4CACFF')
- }
- }
- })
- console.log(response)
- }).catch((error) => {
- console.log(error)
- })
- }
-
- // ----------------------------------------------------------------------------------------------评论 End
-
- // ----------------------------------------------------------------------------------------------评论 End
-
- componentDidMount() {
- // commentsDelegateParent #game_left_contents #tab_con_4
- $(".commentsDelegateParent")
- .delegate(".J_Comment_Reply .comment_content img, .J_Comment_Reply .childrenCommentsView img","click", (event) => {
-
- const imageSrc = event.target.src
- // 非回复里的头像图片; 非emoticons
- if (imageSrc.indexOf('/images/avatars/User') === -1 &&
- imageSrc.indexOf('kindeditor/plugins/emoticons') === -1 ) {
- this.setState({
- showImage: true,
- imageSrc,
- })
- }
- });
- }
- onImageLayerClose = () => {
- this.setState({
- showImage: false,
- imageSrc: '',
- })
- }
- render() {
- return (
-
- Props -
-{stringify(this.props)}-
- State -
-{stringify(this.state)}- {super.render()} -
\r\n\t666\r\n
\r\n\r\n\t
\r\n
\n\t
\n<\/p>)*$/g,'');
+ }
+
+ axios.post(url, {
+ container_type: "Shixun",
+ container_id: shixun.id,
+ challenge_id: challenge.id,
+ content,
+ position: challenge.position
+ },
+ {
+ // withCredentials: true
+ }
+ ).then((response) => {
+ if (response.data.discuss) {
+
+ window._commentInput.html('');
+ window._commentInput.afterBlur()
+ // this.setState({
+ // runTesting: false,
+ // })
+ this.fetchComment()
+ }
+ console.log(response)
+ }).catch((error) => {
+ console.log(error)
+ })
+ return true;
+ }
+ _findCommentById(id, arg_comments) {
+ let comments;
+ if (!arg_comments) {
+ comments = this.state.comments;
+ } else {
+ comments = arg_comments;
+ }
+ for(let i = 0; i < comments.length; i++) {
+ if (id === comments[i].id) {
+ return i;
+ }
+ }
+ }
+ replyComment(commentContent, id, editor) {
+ // http://localhost:3000/api/v1/discusses/812/reply
+ const { challenge, shixun, user, showSnackbar, match } = this.props;
+
+ if (!commentContent || commentContent.length === 0) {
+ showSnackbar('必须填写内容!')
+ return;
+ }
+ // const url = `/api/v1/discusses/${id}/reply`
+ const url = `/discusses/${id}/reply.json`
+ if (commentContent) {
+ commentContent = commentContent.replace(/(\n
\n\t
\n<\/p>)*$/g,'');
+ }
+ if (!user.login && user.user_url) {
+ const loginAr = user.user_url.split('/')
+ user.login = loginAr[loginAr.length - 1]
+ }
+ axios.post(url, {
+ content: commentContent,
+ // TODO
+ "container_id": match.params.shixunId,
+ "container_type": "Shixun",
+ },
+ {
+ // withCredentials: true
+ }
+ ).then((response) => {
+ if (response.data.discuss) {
+ let newDiscuss = response.data.discuss;
+ let { comments } = this.state;
+ var commentIndex = this._findCommentById(id);
+ let comment = comments[commentIndex]
+ comment = Object.assign({}, comment)
+ if (!comment.children ) {
+ comment.children = []
+ } else {
+ comment.children = comment.children.slice(0);
+ }
+ // TODO userName iamge_url
+ comment.children.push( {
+ "can_delete": true,
+ "content": commentContent,
+
+ "image_url": user.image_url,
+ "username": user.username,
+ "user_login": user.login,
+ "id": newDiscuss.id,
+ "position": newDiscuss.position,
+ "time": "1分钟前",
+ "praise_count": newDiscuss.praise_count,
+
+ "user_id": newDiscuss.user_id,
+
+ })
+
+ comments = comments.slice(0)
+ comments[commentIndex] = comment
+
+ // ke
+ editor.html && editor.html('')
+ // md
+ if (editor.setValue) {
+ editor.setValue('')
+ const $ = window.$
+ var view_selector = `.commentItemMDEditorView_${id}`
+ $(view_selector).hide();
+ }
+
+
+ this.setState({
+ // runTesting: false,
+ comments: comments
+ }, ()=>{
+ // keditor代码美化
+ editor.html && window.prettyPrint()
+ })
+ }
+ console.log(response)
+ }).catch((error) => {
+ console.log(error)
+ })
+ }
+ hiddenComment(item, childCommentId) {
+ const id = item.id
+ const { challenge, shixun, user, showSnackbar, match } = this.props;
+ // const url = `/api/v1/discusses/${id}/hidden`
+ const url = `/discusses/${id}/hidden.json`
+
+ const commentIndex = this._findCommentById(id);
+ const { comments } = this.state;
+ const comment = Object.assign({}, comments[commentIndex]);
+ axios.post(url, {
+ hidden: !comment.hidden ? "1" : "0",
+ container_identifier: match.params.shixunId || shixun.identifier
+ },
+ {
+ // withCredentials: true
+ }
+ ).then((response) => {
+ if (response.data.status === -1) {
+ showSnackbar(response.data.message)
+ return;
+ }
+ if (response.data.status === 1) {
+
+ if (!childCommentId) {
+ comment.hidden = !comment.hidden;
+ const commentsCopy = this.state.comments.slice(0)
+ commentsCopy[commentIndex] = comment
+ this.setState({
+ comments: commentsCopy
+ })
+ } else { // TODO 目前子回复没hidden字段
+ let childCommentIndex = this._findCommentById(childCommentId, comments[commentIndex].children);
+ const childComment = comments[commentIndex].children[childCommentIndex]
+ childComment.hidden = !childComment.hidden;
+ this.setState({ comments })
+ }
+
+ }
+ // {"message":"Couldn't find Discuss with id=911","status":-1}
+ console.log(response)
+ }).catch((error) => {
+ console.log(error)
+ })
+ }
+ deleteComment(parrentComment, childCommentId) {
+ const { challenge, shixun } = this.props;
+ let deleteCommentId = parrentComment.id
+ if (childCommentId) {
+ deleteCommentId = childCommentId;
+ }
+ // const url = `/api/v1/discusses/${deleteCommentId}`
+ const url = `/discusses/${deleteCommentId}.json`
+
+ axios.delete(url,
+ {
+ // withCredentials: true
+ }
+ ).then((response) => {
+ // TODO 删除成功或失败
+ if (response.data && response.data.status === 1) {
+ const commentIndex = this._findCommentById(parrentComment.id);
+
+ // https://stackoverflow.com/questions/29527385/removing-element-from-array-in-component-state
+ if (!childCommentId) {
+ this.setState((prevState) => ({
+ comments: update(prevState.comments, {$splice: [[commentIndex, 1]]})
+ }))
+
+ if (this.state.comments.length <= 5) {
+ this.fetchComment()
+ }
+ } else {
+ let comments = this.state.comments;
+ let newComments = Object.assign({}, comments)
+ let childCommentIndex = this._findCommentById(childCommentId, newComments[commentIndex].children);
+ newComments[commentIndex].children = update(newComments[commentIndex].children, {$splice: [[childCommentIndex, 1]]})
+ this.setState({ newComments })
+ }
+ }
+ console.log(response)
+ }).catch((error) => {
+ console.log(error)
+ })
+ }
+
+ rewardCode(parrentComment, childComment, amount) {
+ const { challenge, shixun, showSnackbar } = this.props;
+ let handleComment = parrentComment
+ if (childComment) {
+ handleComment = childComment;
+ }
+ let handleCommentId = handleComment.id;
+ // const url = `/api/v1/discusses/${handleCommentId}/reward_code`
+ const url = `/discusses/${handleCommentId}/reward_code.json`
+
+ axios.post(url, {
+ // id: handleCommentId,
+
+ // container_id: shixun.id,
+ container_type: 'Discusses',
+ score: amount,
+ user_id: handleComment.user_id
+ },
+ {
+ // withCredentials: true
+ }
+ ).then((response) => {
+ if (response.data && response.data.code) {
+ const commentIndex = this._findCommentById(parrentComment.id);
+ let { comments } = this.state;
+ const newComments = comments.slice(0)
+
+ if (childComment) {
+ const childCommentIndex = this._findCommentById(handleComment.id, parrentComment.children);
+ const newChildComment = Object.assign({}, childComment);
+ newChildComment.reward = response.data.code
+ parrentComment = Object.assign({}, parrentComment)
+ parrentComment.children = parrentComment.children.slice(0)
+ parrentComment.children[childCommentIndex] = newChildComment
+
+ newComments[commentIndex] = parrentComment;
+
+
+ } else {
+ const newComment = Object.assign({}, newComments[commentIndex]);
+ newComment.reward = response.data.code;
+ newComments[commentIndex] = newComment;
+ }
+ this.setState({
+ comments: newComments
+ })
+ }
+ }).catch((error) => {
+ console.log(error)
+ showSnackbar('奖励失败,请联系系统管理员!')
+ })
+ }
+
+ // 评论点赞
+ commentPraise(discussId) {
+ const commentIndex = this._findCommentById(discussId);
+ const { comments } = this.state;
+
+ const { challenge } = this.props;
+ // const url = `/api/v1/discusses/${discussId}/plus`
+ const url = `/discusses/${discussId}/plus.json`
+ axios.post(url, {
+ // id: discussId,
+ // container_id: challenge.id,
+ container_type: 'Discuss', //Discuss
+ type: comments[commentIndex].user_praise === true ? 0 : 1, // "踩0;赞1"
+ },
+ {
+ // withCredentials: true
+ }
+ ).then((response) => {
+ if (response.data.praise_count === 0 || response.data.praise_count) {
+ const newComments = comments.slice(0)
+ const comment = Object.assign({}, newComments[commentIndex])
+ comment.user_praise = !comment.user_praise;
+ comment.praise_count = response.data.praise_count;
+ newComments[commentIndex] = comment;
+ this.setState({
+ comments: newComments
+ })
+ }
+ console.log(response)
+ }).catch((error) => {
+ console.log(error)
+ })
+ }
+
+ newMessage() {
+ return; // newMessage 暂时不用了
+ const { shixun, myshixun } = this.props;
+ const url = `/api/v1/shixuns/${shixun.id}/new_message?container_type=Shixun&myshixun_id=${myshixun.id}`
+ // this.setState({
+ // gotNewReply: true
+ // })
+ axios.get(url,
+ {
+ // withCredentials: true
+ }
+ ).then((response) => {
+ const new_message = response.data.new_message;
+ if (response.data.new_message) {
+ this.setState({
+ gotNewReply: new_message
+ })
+ }
+ // console.log(response)
+ }).catch((error) => {
+ console.log(error)
+ })
+ }
+
+ showNewReply() {
+ const { shixun, myshixun } = this.props;
+ const commentId = 929 // TODO
+ const url = `/api/v1/shixuns/${shixun.id}/anchor?container_type=Shixun&myshixun_id=${myshixun.id}&discuss_id=${commentId}`
+
+ this.setState({
+ loadingComments: true,
+ gotNewReply: false,
+
+ });
+ axios.get(url,
+ {
+ // withCredentials: true
+ }
+ ).then((response) => {
+ const data = response.data;
+ const new_message = data.new_message;
+
+ this.setState({
+ comments: data.children_list,
+ comment_count_without_reply: data.disscuss_count,
+
+ currentPage: data.page,
+ loadingComments: false,
+
+ }, () => {
+ if (response.data.find_status) { // 没找到评论的话,默认会返回第一页的评论
+ const comment_J = window.$(`#reply_content_${commentId}`);
+ if (comment_J.length) {
+ comment_J[0].scrollIntoView()
+ comment_J.parents('.comment_item_cont').css('border', '1px solid #4CACFF')
+ }
+ }
+ })
+ console.log(response)
+ }).catch((error) => {
+ console.log(error)
+ })
+ }
+
+ // ----------------------------------------------------------------------------------------------评论 End
+
+ // ----------------------------------------------------------------------------------------------评论 End
+
+ componentDidMount() {
+ // commentsDelegateParent #game_left_contents #tab_con_4
+ $(".commentsDelegateParent")
+ .delegate(".J_Comment_Reply .comment_content img, .J_Comment_Reply .childrenCommentsView img","click", (event) => {
+
+ const imageSrc = event.target.src
+ // 非回复里的头像图片; 非emoticons
+ if (imageSrc.indexOf('/images/avatars/User') === -1 &&
+ imageSrc.indexOf('kindeditor/plugins/emoticons') === -1 ) {
+ this.setState({
+ showImage: true,
+ imageSrc,
+ })
+ }
+ });
+ }
+ onImageLayerClose = () => {
+ this.setState({
+ showImage: false,
+ imageSrc: '',
+ })
+ }
+
+ showNotification = (description, message = "提示", icon) => {
+ const data = {
+ message,
+ description
+ }
+ if (icon) {
+ data.icon = icon;
+ }
+ notification.open(data);
+ }
+ render() {
+ return (
+
+ Props +
+{stringify(this.props)}+
+ State +
+{stringify(this.state)}+ {super.render()} +
@@ -554,10 +573,10 @@ class ShixunStudentWork extends Component {
- {data.homework_name} + {data&&data.homework_name}