import React from 'react'; import ReactDOM from 'react-dom'; /* eslint-disable */ import Prism from 'prismjs'; /* eslint-enable */ import { siteRoot, gettext, reviewID, draftOriginFilePath, draftFilePath, draftOriginRepoID, draftFileName, opStatus, publishFileVersion, originFileVersion } from './utils/constants'; import { seafileAPI } from './utils/seafile-api'; import axios from 'axios'; import DiffViewer from '@seafile/seafile-editor/dist/viewer/diff-viewer'; import Loading from './components/loading'; import Toast from './components/toast'; import ReviewComments from './components/review-list-view/review-comments'; import 'seafile-ui'; import './assets/css/fa-solid.css'; import './assets/css/fa-regular.css'; import './assets/css/fontawesome.css'; import './css/layout.css'; import './css/initial-style.css'; import './css/toolbar.css'; import './css/draft-review.css'; require('@seafile/seafile-editor/dist/editor/code-hight-package'); class DraftReview extends React.Component { constructor(props) { super(props); this.state = { draftContent: '', draftOriginContent: '', reviewStatus: opStatus, isLoading: true, commentsNumber: null, isShowComments: false, inResizing: false, commentWidth: 30, }; } componentDidMount() { if (publishFileVersion == 'None') { axios.all([ seafileAPI.getFileDownloadLink(draftOriginRepoID, draftFilePath), seafileAPI.getFileDownloadLink(draftOriginRepoID, draftOriginFilePath) ]).then(axios.spread((res1, res2) => { axios.all([ seafileAPI.getFileContent(res1.data), seafileAPI.getFileContent(res2.data) ]).then(axios.spread((draftContent, draftOriginContent) => { this.setState({ draftContent: draftContent.data, draftOriginContent: draftOriginContent.data, isLoading: false }); })); })); } else { let dl0 = siteRoot + 'repo/' + draftOriginRepoID + '/' + publishFileVersion + '/download?' + 'p=' + draftOriginFilePath; let dl = siteRoot + 'repo/' + draftOriginRepoID + '/' + originFileVersion + '/download?' + 'p=' + draftOriginFilePath; axios.all([ seafileAPI.getFileContent(dl0), seafileAPI.getFileContent(dl) ]).then(axios.spread((draftContent, draftOriginContent) => { this.setState({ draftContent: draftContent.data, draftOriginContent: draftOriginContent.data, isLoading: false, }); })); } } onCloseReview = () => { seafileAPI.updateReviewStatus(reviewID, 'closed').then(res => { this.setState({reviewStatus: 'closed'}); let msg_s = gettext('Successfully closed review %(reviewID)s.'); msg_s = msg_s.replace('%(reviewID)s', reviewID); Toast.success(msg_s); }).catch(() => { let msg_s = gettext('Failed to close review %(reviewID)s'); msg_s = msg_s.replace('%(reviewID)s', reviewID); Toast.error(msg_s); }); } onPublishReview = () => { seafileAPI.updateReviewStatus(reviewID, 'finished').then(res => { this.setState({reviewStatus: 'finished'}); let msg_s = gettext('Successfully published review %(reviewID)s.'); msg_s = msg_s.replace('%(reviewID)s', reviewID); Toast.success(msg_s); }).catch(() => { let msg_s = gettext('Failed to close review %(reviewID)s.') msg_s = msg_s.replace('%(reviewID)s', reviewID); Toast.error(msg_s); }); } toggleCommentList = () => { this.setState({ isShowComments: !this.state.isShowComments }); } getCommentsNumber = () => { seafileAPI.listReviewComments(reviewID).then((res) => { let number = res.data.total_count; this.setState({ commentsNumber: number, }); }); } onResizeMouseUp = () => { if(this.state.inResizing) { this.setState({ inResizing: false }); } } onResizeMouseDown = () => { this.setState({ inResizing: true }); }; onResizeMouseMove = (e) => { let rate = 100 - e.nativeEvent.clientX / this.refs.main.clientWidth * 100; if(rate < 20 || rate > 60) { this.setState({ inResizing: false }); return null; } this.setState({ commentWidth: rate }); }; componentWillMount() { this.getCommentsNumber(); } render() { const onResizeMove = this.state.inResizing ? this.onResizeMouseMove : null; return(
{this.state.isLoading ? : }
{ this.state.isShowComments &&
}
); } } ReactDOM.render ( , document.getElementById('wrapper') );