From 193a635d5f0836899483b6494ddf55a25f02da46 Mon Sep 17 00:00:00 2001 From: C_Q Date: Mon, 19 Nov 2018 15:13:38 +0800 Subject: [PATCH] avatar-tips (#2541) --- .../review-list-view/review-list-item.js | 68 ++++++++++++++++--- frontend/src/css/review-content.css | 10 +++ frontend/src/pages/drafts/review-content.js | 1 + media/css/seahub_react.css | 4 ++ 4 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 frontend/src/css/review-content.css diff --git a/frontend/src/components/review-list-view/review-list-item.js b/frontend/src/components/review-list-view/review-list-item.js index af12f35ade..0579f780f6 100644 --- a/frontend/src/components/review-list-view/review-list-item.js +++ b/frontend/src/components/review-list-view/review-list-item.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; +import { Tooltip } from 'reactstrap'; import { siteRoot, lang } from '../../utils/constants'; moment.locale(lang); @@ -9,14 +10,51 @@ const propTypes = { item: PropTypes.object.isRequired, }; -function Reviewers(props) { - return ( -
- {props.reviewers.map((item, index) => ( - {item.username} - ))} -
- ); + +class Reviewers extends React.Component { + constructor(props) { + super(props); + this.state = { + reviewerTipOpen: false, + reviewerList:'' + }; + } + + toggle = () => { + this.reviewerListItem(); + this.setState({ + reviewerTipOpen: !this.state.reviewerTipOpen + }); + } + + reviewerListItem = () => { + let reviewers = ''; + + this.props.item.reviewers.map(item => { + reviewers = reviewers + ' and ' + item.user_name + }); + + this.setState({ + reviewerList: reviewers.substr(5,) + }); + } + + render() { + let items = this.props.item; + let { reviewerList } = this.state; + return ( +
+ + {items.reviewers.map((item, index) => ( + + ))} + + + {reviewerList} + +
+ ); + } } class ReviewListItem extends React.Component { @@ -25,6 +63,7 @@ class ReviewListItem extends React.Component { super(props); this.state = { highlight: '', + authorTipOpen: false }; } @@ -44,6 +83,12 @@ class ReviewListItem extends React.Component { } } + toggle = () => { + this.setState({ + authorTipOpen: !this.state.authorTipOpen + }); + } + onReviewsClick = () => { let item = this.props.item; let itemID = item.id; @@ -67,8 +112,11 @@ class ReviewListItem extends React.Component { {fileName} {item.draft_origin_repo_name} {localTime} - - + + + + {item.author.user_name} + ); } diff --git a/frontend/src/css/review-content.css b/frontend/src/css/review-content.css new file mode 100644 index 0000000000..0e8792d15f --- /dev/null +++ b/frontend/src/css/review-content.css @@ -0,0 +1,10 @@ +.reviewer-list .reviewer-avatar:first-child { + margin-left: 0; +} + +.reviewer-list .reviewer-avatar { + margin-left: -0.5rem; + box-shadow: 0 0 0 2px #fff; + cursor: pointer; +} + diff --git a/frontend/src/pages/drafts/review-content.js b/frontend/src/pages/drafts/review-content.js index e6d364979c..06594fd9b2 100644 --- a/frontend/src/pages/drafts/review-content.js +++ b/frontend/src/pages/drafts/review-content.js @@ -3,6 +3,7 @@ import { gettext } from '../../utils/constants'; import { seafileAPI } from '../../utils/seafile-api'; import Loading from '../../components/loading'; import ReviewListView from '../../components/review-list-view/review-list-view'; +import '../../css/review-content.css'; class ReviewContent extends React.Component { diff --git a/media/css/seahub_react.css b/media/css/seahub_react.css index 2be9866a02..5400cf1af8 100644 --- a/media/css/seahub_react.css +++ b/media/css/seahub_react.css @@ -145,6 +145,10 @@ ul,ol,li { font-weight: normal; } +.avatar-with-tooltip { + cursor: pointer; +} + /* UI Widget */ /**** caret ****/