mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-04 16:31:13 +00:00
improve-style (#2508)
This commit is contained in:
@@ -9,7 +9,8 @@ import '../../css/add-reviewer-dialog.css';
|
|||||||
const propTypes = {
|
const propTypes = {
|
||||||
showReviewerDialog: PropTypes.bool.isRequired,
|
showReviewerDialog: PropTypes.bool.isRequired,
|
||||||
reviewID: PropTypes.string.isRequired,
|
reviewID: PropTypes.string.isRequired,
|
||||||
toggleAddReviewerDialog: PropTypes.func.isRequired
|
toggleAddReviewerDialog: PropTypes.func.isRequired,
|
||||||
|
reviewers: PropTypes.array.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
class AddReviewerDialog extends React.Component {
|
class AddReviewerDialog extends React.Component {
|
||||||
@@ -17,14 +18,15 @@ class AddReviewerDialog extends React.Component {
|
|||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
reviewers: [],
|
reviewers: this.props.reviewers,
|
||||||
selectedOption: null,
|
selectedOption: null,
|
||||||
errorMsg: [],
|
errorMsg: [],
|
||||||
|
loading: false,
|
||||||
};
|
};
|
||||||
this.Options = [];
|
this.Options = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
listReviewers = () => {
|
||||||
seafileAPI.listReviewers(this.props.reviewID).then((res) => {
|
seafileAPI.listReviewers(this.props.reviewID).then((res) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
reviewers: res.data.reviewers
|
reviewers: res.data.reviewers
|
||||||
@@ -66,6 +68,10 @@ class AddReviewerDialog extends React.Component {
|
|||||||
for (let i = 0; i < this.state.selectedOption.length; i ++) {
|
for (let i = 0; i < this.state.selectedOption.length; i ++) {
|
||||||
reviewers[i] = this.state.selectedOption[i].email;
|
reviewers[i] = this.state.selectedOption[i].email;
|
||||||
}
|
}
|
||||||
|
this.setState({
|
||||||
|
loading: true,
|
||||||
|
errorMsg: [],
|
||||||
|
});
|
||||||
seafileAPI.addReviewers(this.props.reviewID, reviewers).then((res) => {
|
seafileAPI.addReviewers(this.props.reviewID, reviewers).then((res) => {
|
||||||
if (res.data.failed.length > 0) {
|
if (res.data.failed.length > 0) {
|
||||||
let errorMsg = [];
|
let errorMsg = [];
|
||||||
@@ -75,15 +81,10 @@ class AddReviewerDialog extends React.Component {
|
|||||||
this.setState({
|
this.setState({
|
||||||
errorMsg: errorMsg
|
errorMsg: errorMsg
|
||||||
});
|
});
|
||||||
let that = this;
|
|
||||||
setTimeout(() => {
|
|
||||||
that.setState({
|
|
||||||
errorMsg: []
|
|
||||||
});
|
|
||||||
}, 3000);
|
|
||||||
}
|
}
|
||||||
this.setState({
|
this.setState({
|
||||||
selectedOption: null
|
selectedOption: null,
|
||||||
|
loading: false
|
||||||
});
|
});
|
||||||
if (res.data.success.length > 0) {
|
if (res.data.success.length > 0) {
|
||||||
this.listReviewers();
|
this.listReviewers();
|
||||||
@@ -107,8 +108,8 @@ class AddReviewerDialog extends React.Component {
|
|||||||
{this.state.errorMsg.length > 0 &&
|
{this.state.errorMsg.length > 0 &&
|
||||||
this.state.errorMsg.map((item, index = 0, arr) => {
|
this.state.errorMsg.map((item, index = 0, arr) => {
|
||||||
return (
|
return (
|
||||||
<p className="error" key={index}>{this.state.errorMsg[index].email}
|
<p className="reviewer-select-error error" key={index}>{this.state.errorMsg[index].email}
|
||||||
{':'}{this.state.errorMsg[index].error_msg}</p>
|
{': '}{this.state.errorMsg[index].error_msg}</p>
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -124,7 +125,11 @@ class AddReviewerDialog extends React.Component {
|
|||||||
}
|
}
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
<Button color="primary" onClick={this.addReviewers}>{gettext('Submit')}</Button>
|
{ this.state.loading ?
|
||||||
|
<Button disabled><i className="fa fa-spinner" aria-hidden="true"></i></Button>
|
||||||
|
:
|
||||||
|
<Button color="primary" onClick={this.addReviewers}>{gettext('Submit')}</Button>
|
||||||
|
}
|
||||||
<Button color="secondary" onClick={this.props.toggleAddReviewerDialog}>
|
<Button color="secondary" onClick={this.props.toggleAddReviewerDialog}>
|
||||||
{gettext('Cancel')}</Button>
|
{gettext('Cancel')}</Button>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
|
@@ -8,6 +8,9 @@
|
|||||||
height: 2rem;
|
height: 2rem;
|
||||||
line-height: 2rem;
|
line-height: 2rem;
|
||||||
}
|
}
|
||||||
|
.reviewer-select-error {
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
.reviewer-select>div>div:nth-child(2) {
|
.reviewer-select>div>div:nth-child(2) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
@@ -68,6 +68,50 @@
|
|||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.review-side-panel {
|
||||||
|
border-left: 1px solid #e6e6dd;
|
||||||
|
background-color: #fff;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.review-side-panel-head {
|
||||||
|
border-bottom: 1px solid #e5e5e5;
|
||||||
|
line-height: 3em;
|
||||||
|
background-color: #fafaf9;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.review-side-panel-body {
|
||||||
|
padding: 1rem 2rem;
|
||||||
|
}
|
||||||
|
.review-side-panel-reviewers, .review-side-panel-author {
|
||||||
|
border-bottom: 1px solid #e6e6dd;
|
||||||
|
padding: 1em 0;
|
||||||
|
}
|
||||||
|
.reviewers-header, .author-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
.reviewers-header i {
|
||||||
|
color: #c8c8c8;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.reviewers-header i:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
color: #a4a4a4;
|
||||||
|
}
|
||||||
|
.review-side-panel-header {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #586069;
|
||||||
|
}
|
||||||
|
.reviewer-avatar, .author-avatar {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.reviewer-name, .author-name {
|
||||||
|
height: 2rem;
|
||||||
|
line-height: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 992px) {
|
@media (max-width: 992px) {
|
||||||
.main .cur-view-container .cur-view-content-commenton {
|
.main .cur-view-container .cur-view-content-commenton {
|
||||||
width: 20% !important;
|
width: 20% !important;
|
||||||
|
@@ -10,7 +10,7 @@ import DiffViewer from '@seafile/seafile-editor/dist/viewer/diff-viewer';
|
|||||||
import Loading from './components/loading';
|
import Loading from './components/loading';
|
||||||
import Toast from './components/toast';
|
import Toast from './components/toast';
|
||||||
import ReviewComments from './components/review-list-view/review-comments';
|
import ReviewComments from './components/review-list-view/review-comments';
|
||||||
import { Button, Tooltip } from 'reactstrap';
|
import { Tooltip } from 'reactstrap';
|
||||||
import AddReviewerDialog from './components/dialog/add-reviewer-dialog.js';
|
import AddReviewerDialog from './components/dialog/add-reviewer-dialog.js';
|
||||||
|
|
||||||
import 'seafile-ui';
|
import 'seafile-ui';
|
||||||
@@ -39,7 +39,10 @@ class DraftReview extends React.Component {
|
|||||||
isShowDiff: true,
|
isShowDiff: true,
|
||||||
showDiffTip: false,
|
showDiffTip: false,
|
||||||
showReviewerDialog: false,
|
showReviewerDialog: false,
|
||||||
|
reviewers: [],
|
||||||
};
|
};
|
||||||
|
this.authorName = '';
|
||||||
|
this.authorAvatar = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@@ -95,7 +98,7 @@ class DraftReview extends React.Component {
|
|||||||
msg_s = msg_s.replace('%(reviewID)s', reviewID);
|
msg_s = msg_s.replace('%(reviewID)s', reviewID);
|
||||||
Toast.success(msg_s);
|
Toast.success(msg_s);
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
let msg_s = gettext('Failed to publish review %(reviewID)s.')
|
let msg_s = gettext('Failed to publish review %(reviewID)s.');
|
||||||
msg_s = msg_s.replace('%(reviewID)s', reviewID);
|
msg_s = msg_s.replace('%(reviewID)s', reviewID);
|
||||||
Toast.error(msg_s);
|
Toast.error(msg_s);
|
||||||
});
|
});
|
||||||
@@ -146,7 +149,7 @@ class DraftReview extends React.Component {
|
|||||||
onSwitchShowDiff = () => {
|
onSwitchShowDiff = () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
isShowDiff: !this.state.isShowDiff,
|
isShowDiff: !this.state.isShowDiff,
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleDiffTip = () => {
|
toggleDiffTip = () => {
|
||||||
@@ -161,8 +164,25 @@ class DraftReview extends React.Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getAuthorInfo = () => {
|
||||||
|
seafileAPI.getAccountInfo().then((res) => {
|
||||||
|
this.authorName = res.data.name;
|
||||||
|
this.authorAvatar = res.data.avatar_url;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
listReviewers = () => {
|
||||||
|
seafileAPI.listReviewers(reviewID).then((res) => {
|
||||||
|
this.setState({
|
||||||
|
reviewers: res.data.reviewers
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
this.getCommentsNumber();
|
this.getCommentsNumber();
|
||||||
|
this.getAuthorInfo();
|
||||||
|
this.listReviewers();
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
@@ -195,8 +215,6 @@ class DraftReview extends React.Component {
|
|||||||
target="toggle-diff" toggle={this.toggleDiffTip}>
|
target="toggle-diff" toggle={this.toggleDiffTip}>
|
||||||
{gettext('View diff')}</Tooltip>
|
{gettext('View diff')}</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
<button className="btn btn-primary add-reviewer-btn" onClick={this.toggleAddReviewerDialog}>
|
|
||||||
{gettext('Add reviewer')}</button>
|
|
||||||
<button className="btn btn-icon btn-secondary btn-active common-list-btn"
|
<button className="btn btn-icon btn-secondary btn-active common-list-btn"
|
||||||
id="commentsNumber" type="button" data-active="false"
|
id="commentsNumber" type="button" data-active="false"
|
||||||
onMouseDown={this.toggleCommentList}>
|
onMouseDown={this.toggleCommentList}>
|
||||||
@@ -252,6 +270,43 @@ class DraftReview extends React.Component {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
{ !this.state.isShowComments &&
|
||||||
|
<div className="cur-view-right-part" style={{width:(this.state.commentWidth)+'%'}}>
|
||||||
|
<div className="seafile-comment-resize" onMouseDown={this.onResizeMouseDown}></div>
|
||||||
|
<div className="review-side-panel">
|
||||||
|
<div className="review-side-panel-head">{gettext('Review #')}{reviewID}</div>
|
||||||
|
<div className="review-side-panel-body">
|
||||||
|
<div className="review-side-panel-reviewers">
|
||||||
|
<div className="reviewers-header">
|
||||||
|
<div className="review-side-panel-header">{gettext('Reviewers')}</div>
|
||||||
|
<i className="fa fa-cog" onClick={this.toggleAddReviewerDialog}></i>
|
||||||
|
</div>
|
||||||
|
{ this.state.reviewers.length > 0 ?
|
||||||
|
this.state.reviewers.map((item, index = 0, arr) => {
|
||||||
|
return (
|
||||||
|
<div className="reviewer-info" key={index}>
|
||||||
|
<img className="avatar reviewer-avatar" src={item.avatar_url} alt=""/>
|
||||||
|
<span className="reviewer-name">{item.user_name}</span>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})
|
||||||
|
:
|
||||||
|
<span>{gettext('No reviewer yet.')}</span>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div className="review-side-panel-author">
|
||||||
|
<div className="author-header">
|
||||||
|
<div className="review-side-panel-header">{gettext('Author')}</div>
|
||||||
|
</div>
|
||||||
|
<div className="author-info">
|
||||||
|
<img className="avatar author-avatar" src={this.authorAvatar} alt=""/>
|
||||||
|
<span className="author-name">{this.authorName}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{ this.state.showReviewerDialog &&
|
{ this.state.showReviewerDialog &&
|
||||||
@@ -259,6 +314,7 @@ class DraftReview extends React.Component {
|
|||||||
showReviewerDialog={this.state.showReviewerDialog}
|
showReviewerDialog={this.state.showReviewerDialog}
|
||||||
toggleAddReviewerDialog={this.toggleAddReviewerDialog}
|
toggleAddReviewerDialog={this.toggleAddReviewerDialog}
|
||||||
reviewID={reviewID}
|
reviewID={reviewID}
|
||||||
|
reviewers={this.state.reviewers}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user