diff --git a/frontend/src/components/review-list-view/review-comments.js b/frontend/src/components/review-list-view/review-comments.js index 8e8d61862e..dab0e537fc 100644 --- a/frontend/src/components/review-list-view/review-comments.js +++ b/frontend/src/components/review-list-view/review-comments.js @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { processor } from '../../utils/seafile-markdown2html'; -import { Button, Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; +import { Button, Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Tooltip } from 'reactstrap'; import { seafileAPI } from '../../utils/seafile-api'; import { reviewID, gettext } from '../../utils/constants'; import moment from 'moment'; @@ -25,6 +25,8 @@ class ReviewComments extends React.Component { userAvatar: `${window.location.host}media/avatars/default.png`, inResizing: false, commentFooterHeight: 30, + showResolvedComment: false, + openResolvedTooltip: false, }; this.accountInfo = {}; } @@ -70,6 +72,18 @@ class ReviewComments extends React.Component { }); } + toggleResolvedComment = () => { + this.setState({ + showResolvedComment: !this.state.showResolvedComment + }); + } + + toggleResolvedTooltip = () => { + this.setState({ + openResolvedTooltip: !this.state.openResolvedTooltip + }); + } + deleteComment = (event) => { seafileAPI.deleteReviewComment(reviewID, event.target.id).then((res) => { this.props.getCommentsNumber(); @@ -120,6 +134,15 @@ class ReviewComments extends React.Component {
{gettext('Comments')}
+
+ + + {gettext('Show/Hide resolved comments')} +
{ this.props.commentsNumber == 0 && @@ -133,23 +156,19 @@ class ReviewComments extends React.Component { @@ -185,7 +204,9 @@ const commentItemPropTypes = { deleteComment: PropTypes.func.isRequired, resolveComment: PropTypes.func.isRequired, accountInfo: PropTypes.object.isRequired, - headUrl: PropTypes.string.isRequired + headUrl: PropTypes.string.isRequired, + resolved: PropTypes.bool.isRequired, + showResolvedComment: PropTypes.bool.isRequired }; class CommentItem extends React.Component { @@ -224,29 +245,33 @@ class CommentItem extends React.Component { } render() { + if (this.props.resolved && !this.props.showResolvedComment) { + return null; + } return ( -
  • +
  • avatar
    {this.props.name}
    {this.props.time}
    - - - - - - { - (this.props.user_email === this.props.accountInfo.email) && - {gettext('Delete')} - } - {gettext('Mark as resolved')} - - + { !this.props.resolved && + + + + + + { (this.props.user_email === this.props.accountInfo.email) && + {gettext('Delete')}} + {gettext('Mark as resolved')} + + + }
  • diff --git a/frontend/src/css/review-comments.css b/frontend/src/css/review-comments.css index 977e96c399..920e544bc3 100644 --- a/frontend/src/css/review-comments.css +++ b/frontend/src/css/review-comments.css @@ -30,8 +30,11 @@ .seafile-comment-title .seafile-comment-title-close:hover { color: #888; } +.seafile-comment-title .seafile-comment-title-toggle { + display: flex; +} .seafile-comment-list { - padding-top: 50px; + padding-top: 45px; box-sizing: border-box; height: 100%; overflow-y: auto; @@ -48,6 +51,9 @@ padding: 15px 10px; overflow-y: hidden; } +.seafile-comment-item-resolved { + background-color: #e6ffed; +} .seafile-comment-item .seafile-comment-info { display: flex; } diff --git a/media/css/seahub_react.css b/media/css/seahub_react.css index 07da9a102d..7d8c4e1cfa 100644 --- a/media/css/seahub_react.css +++ b/media/css/seahub_react.css @@ -981,3 +981,8 @@ a.op-icon:focus { } /* end activity page */ +/* css to overwrite seahub-ui.css */ +.custom-switch-input:checked ~ .custom-switch-indicator { + background: #eb8205; + border: 1px solid #eb8205; +}