From d0417effab067259dd9719bafeec8898da0eff77 Mon Sep 17 00:00:00 2001 From: wjr <651969505@qq.com> Date: Sun, 21 Aug 2022 21:07:39 +0800 Subject: [PATCH] feat: issue and jouranl support emoji --- src/forge/Order/Detail.js | 104 +++++++++++++++++++++++++++++---- src/forge/Order/order.css | 18 ++++++ src/forge/comments/comments.js | 103 ++++++++++++++++++++++++++++---- 3 files changed, 203 insertions(+), 22 deletions(-) diff --git a/src/forge/Order/Detail.js b/src/forge/Order/Detail.js index 4d1b47cfc..aa2c342a7 100644 --- a/src/forge/Order/Detail.js +++ b/src/forge/Order/Detail.js @@ -3,10 +3,11 @@ import { Link } from "react-router-dom"; import axios from "axios"; import { getImageUrl } from "educoder"; -import { Form, Popconfirm, Tag, Spin } from "antd"; +import { Form, Popconfirm, Tag, Spin, Popover, Icon, Button } from "antd"; import Attachments from "../Upload/attachment"; import RenderHtml from "../../components/render-html"; import Comments from "../comments/comments"; +import update from 'immutability-helper' import "./order.css"; class Detail extends Component { @@ -50,6 +51,13 @@ class Detail extends Component { .get(url) .then((result) => { if (result) { + // todo 增加后台返回 + result.data.emojiComment = { + "😀": { + "users": ["test"], + "total": 1 + } + } this.setState({ data: result.data, isSpins: false @@ -190,7 +198,54 @@ class Detail extends Component { render() { const { projectsId, orderId, owner } = this.props.match.params; + const { current_user } = this.props const { data, isSpins } = this.state; + const emojiList = ["😀", "😅"]; + + const update_emoji_comment = (emoji) => { + // 无emoji评论 + if (!data.emojiComment || !data.emojiComment[emoji] || data.emojiComment[emoji].users.length == 0) { + var emojiComment = data.emojiComment ? data.emojiComment : {} + emojiComment[emoji] = { + "users": [owner], + "total": 1 + } + this.setState({ + data: update(data, { emojiComment: { $set: emojiComment } }) + }) + return + } + + // 有emoji评论 + var userList = data.emojiComment[emoji].users + var addNewUser = true + for (var i = 0; i < userList.length; i++) { + if (userList[i] == owner) { + userList.splice(i, 1); + addNewUser = false + break + } + } + if (addNewUser) { + userList.push(owner) + } + var emojiComment = data.emojiComment + emojiComment[emoji] = { + "users": userList, + "total": userList.length + } + this.setState({ + data: update(data, { emojiComment: { $set: emojiComment } }) + }) + } + + const emojiComment = ( + emojiList.map((emoji) => { + return + }) + ); + const get_color = (type) => { if (type === "高") { return "#e67e22"; @@ -233,7 +288,7 @@ class Detail extends Component { : "合并请求"} 】 - {data && data.subject} + {data && data.subject} {data && data.priority && ( @@ -279,8 +334,8 @@ class Detail extends Component { ) : ( - "" - )} + "" + )} @@ -289,8 +344,8 @@ class Detail extends Component { {data && data.description && data.description.length > 0 ? ( this.commentCtx(data.description) ) : ( - 暂无描述 - )} + 暂无描述 + )} {data && data.attachments && data.attachments.length > 0 ? ( ) : ( - "" - )} + "" + )} +
+ + {current_user && current_user.login ? ( + + + + ) : ("") + } + {current_user && current_user.login && data && data.emojiComment ? ( + Object.keys(data.emojiComment).map(key => { + const item = data.emojiComment[key] + if (item.users.length == 0) { + return + } + return + + + }) + ) : ("") + } +
@@ -329,8 +413,8 @@ class Detail extends Component { {data.issue_tags[0].name} ) : ( - "--" - )} + "--" + )}

diff --git a/src/forge/Order/order.css b/src/forge/Order/order.css index 0abd116f2..c9e21cdaf 100644 --- a/src/forge/Order/order.css +++ b/src/forge/Order/order.css @@ -44,6 +44,24 @@ display: flex; } +.detail_emoji_comment { + margin-top: 20px; +} +.detail_emoji_comment_menu { + padding: 5px; +} +.detail_emoji_comment_menu_item { + padding-left: 0px; + padding-right: 0px; +} +.detail_emoji_pop { + margin-left: 10px; +} +.detail_emoji_button { + padding-left: 5px; + padding-right: 5px; +} + .detail_right { flex-grow: 1; text-align: right; diff --git a/src/forge/comments/comments.js b/src/forge/comments/comments.js index dca7581f2..aa8f9e673 100644 --- a/src/forge/comments/comments.js +++ b/src/forge/comments/comments.js @@ -5,14 +5,15 @@ import axios from "axios"; import Upload from "../Upload/Index"; import UploadImg from "../Images/upload.png"; import { getImageUrl } from "educoder"; -import { List, Popconfirm, Pagination, Button, Tabs, Avatar } from "antd"; +import { List, Popconfirm, Pagination, Button, Tabs, Popover, Icon } from "antd"; import Attachments from "../Upload/attachment"; import MDEditor from "../../modules/tpm/challengesnew/tpm-md-editor"; import RenderHtml from "../../components/render-html"; import ChildrenComments from "./children_comments"; +import update from 'immutability-helper' import "../Order/order.css"; const { TabPane } = Tabs; -class comments extends Component { +class comments extends Component { constructor(props) { super(props); this.state = { @@ -94,7 +95,7 @@ class comments extends Component { this.setState({ journal_spin: false }); - if(result && result.data.status !== 411){ + if (result && result.data.status !== 411) { this.props.showNotification(result.data.message); } }) @@ -202,7 +203,7 @@ class comments extends Component { {item.value && item.value.length > 0 ? ( - item.detail === "标记"? ( + item.detail === "标记" ? ( { - return ; + return ; }; - Paginations = ()=>{ + Paginations = () => { const { page, limit, search_count } = this.state; - if(search_count > limit){ - return( + if (search_count > limit) { + return (

{ + // 无emoji评论 + if (!item.emojiComment || !item.emojiComment[emoji] || item.emojiComment[emoji].users.length == 0) { + const idx = journalsdata.issue_journals.findIndex(function (journal) { + return journal.id == item.id; + }) + var emojiComment = item.emojiComment ? item.emojiComment : {} + emojiComment[emoji] = { + "users": [current_user.login], + "total": 1 + } + var journal = journalsdata.issue_journals[idx] + journal.emojiComment = emojiComment + this.setState({ + journalsdata: update(journalsdata, { issue_journals: { [idx]: { $set: journal } } }) + }) + return + } + + // 有emoji评论 + var userList = item.emojiComment[emoji].users + var addNewUser = true + for (var i = 0; i < userList.length; i++) { + if (userList[i] == current_user.login) { + userList.splice(i, 1); + addNewUser = false + break + } + } + if (addNewUser) { + userList.push(current_user.login) + } + + const idx = journalsdata.issue_journals.findIndex(function (journal) { + return journal.id == item.id; + }) + var emojiComment = item.emojiComment + emojiComment[emoji] = { + "users": userList, + "total": userList.length + } + var journal = journalsdata.issue_journals[idx] + journal.emojiComment = emojiComment + this.setState({ + journalsdata: update(journalsdata, { issue_journals: { [idx]: { $set: journal } } }) + }) + }; + + const emojiComment = (item) => { + return emojiList.map((emoji) => { + return + }) + }; const new_comment = (is_reply, item_id) => { return ( @@ -315,7 +372,7 @@ class comments extends Component { + >1 - {item.created_at} +
+ {item.created_at} + {current_user && current_user.login ? ( + + + + ) : ("") + } + {current_user && current_user.login && item.emojiComment ? ( + Object.keys(item.emojiComment).map(key => { + const comments = item.emojiComment[key] + if (comments.users.length == 0) { + return + } + return + + + }) + ) : ("") + } +
{current_user && - (current_user.admin || - current_user.login === item.user_login) ? ( + (current_user.admin || + current_user.login === item.user_login) ? (