diff --git a/frontend/src/pages/sdoc/sdoc-file-history/history-version.js b/frontend/src/pages/sdoc/sdoc-file-history/history-version.js index b55d89a329..50d4c78f33 100644 --- a/frontend/src/pages/sdoc/sdoc-file-history/history-version.js +++ b/frontend/src/pages/sdoc/sdoc-file-history/history-version.js @@ -166,7 +166,7 @@ class HistoryVersion extends React.Component { aria-label={gettext('More operations')} /> - {/* {(this.props.index !== 0) && {gettext('Restore')}} */} + {(path[0] + path[1] + path[2] !== 0) && {gettext('Restore')}} {gettext('Download')} {(path[0] !== 0 && path[1] !== 0 && path[2] !== 0) && {gettext('Copy')}} {gettext('Rename')} diff --git a/frontend/src/pages/sdoc/sdoc-file-history/index.js b/frontend/src/pages/sdoc/sdoc-file-history/index.js index bbebf5a8c0..dbcb67d9d6 100644 --- a/frontend/src/pages/sdoc/sdoc-file-history/index.js +++ b/frontend/src/pages/sdoc/sdoc-file-history/index.js @@ -7,6 +7,7 @@ import classnames from 'classnames'; import { DiffViewer } from '@seafile/sdoc-editor'; import moment from 'moment'; import { seafileAPI } from '../../../utils/seafile-api'; +import SDocServerApi from '../../../utils/sdoc-server-api'; import { PER_PAGE, gettext, historyRepoID } from '../../../utils/constants'; import Loading from '../../../components/loading'; import GoBack from '../../../components/common/go-back'; @@ -20,7 +21,7 @@ import './index.css'; const { serviceURL, avatarURL, siteRoot } = window.app.config; const { username, name } = window.app.pageOptions; -const { repoID, fileName, filePath, docUuid, assetsUrl } = window.fileHistory.pageOptions; +const { repoID, fileName, filePath, docUuid, assetsUrl, seadocAccessToken, seadocServerUrl } = window.fileHistory.pageOptions; window.seafile = { repoID, @@ -53,6 +54,12 @@ class SdocFileHistory extends React.Component { sidePanelInitData: {}, showSidePanel: true, }; + const config = { + docUuid, + sdocServer: seadocServerUrl, + accessToken: seadocAccessToken + }; + this.sdocServerApi = new SDocServerApi(config); } componentDidMount() { @@ -371,6 +378,13 @@ class SdocFileHistory extends React.Component { }); } + reloadDocContent = () => { + this.sdocServerApi.reloadDocContent(fileName).catch((error) => { + const errorMessage = 'there has an error in server'; + throw Error(errorMessage); + }); + }; + render() { const { currentVersion, isShowChanges, currentVersionContent, lastVersionContent, isLoading, isMobile, sidePanelInitData, showSidePanel } = this.state; return ( @@ -408,6 +422,7 @@ class SdocFileHistory extends React.Component { onShowChanges={this.onShowChanges} sidePanelInitData={sidePanelInitData} onClose={this.changeSidePanelStatus} + reloadDocContent={this.reloadDocContent} /> ) } diff --git a/frontend/src/pages/sdoc/sdoc-file-history/side-panel.js b/frontend/src/pages/sdoc/sdoc-file-history/side-panel.js index 31a70d1085..e42f6a9cc2 100644 --- a/frontend/src/pages/sdoc/sdoc-file-history/side-panel.js +++ b/frontend/src/pages/sdoc/sdoc-file-history/side-panel.js @@ -105,9 +105,7 @@ class SidePanel extends Component { const { commit_id, path } = currentItem; editUtilities.revertFile(path, commit_id).then(res => { if (res.data.success) { - this.setState({ isLoading: true }, () => { - this.firstLoadSdocHistory(); - }); + this.props.reloadDocContent(); } let message = gettext('Successfully restored.'); toaster.success(message); @@ -294,6 +292,7 @@ SidePanel.propTypes = { errorMessage: PropTypes.string, }), onClose: PropTypes.func, + reloadDocContent: PropTypes.func, }; export default SidePanel; diff --git a/frontend/src/utils/sdoc-server-api.js b/frontend/src/utils/sdoc-server-api.js index f8e431e9b9..5f9150b5f3 100644 --- a/frontend/src/utils/sdoc-server-api.js +++ b/frontend/src/utils/sdoc-server-api.js @@ -14,6 +14,15 @@ class SDocServerApi { return axios.get(url, { headers: { Authorization: `Token ${accessToken}` } }); } + reloadDocContent(fileName) { + const { server, docUuid, accessToken } = this; + const url = `${server}/api/v1/docs/${docUuid}/replace/`; + const formData = new FormData(); + formData.append('doc_uuid', docUuid); + formData.append('doc_name', fileName); + return axios.post(url, formData, { headers: { Authorization: `Token ${accessToken}` } }); + } + } export default SDocServerApi; diff --git a/seahub/templates/sdoc_file_revisions.html b/seahub/templates/sdoc_file_revisions.html index 73b97b4467..38abe5d5af 100644 --- a/seahub/templates/sdoc_file_revisions.html +++ b/seahub/templates/sdoc_file_revisions.html @@ -19,6 +19,8 @@ domain: '{{ domain }}', protocol: '{{ protocol }}', assetsUrl: '{{ assets_url }}', + seadocAccessToken: '{{ seadoc_access_token }}', + seadocServerUrl: '{{ seadoc_server_url }}', } } diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py index 0ed7c1c48d..2e525fe531 100644 --- a/seahub/views/__init__.py +++ b/seahub/views/__init__.py @@ -58,7 +58,7 @@ from seahub.settings import AVATAR_FILE_STORAGE, ENABLE_REPO_SNAPSHOT_LABEL, \ UPLOAD_LINK_EXPIRE_DAYS_MIN, UPLOAD_LINK_EXPIRE_DAYS_MAX, UPLOAD_LINK_EXPIRE_DAYS_DEFAULT, \ SEAFILE_COLLAB_SERVER, ENABLE_RESET_ENCRYPTED_REPO_PASSWORD, \ ADDITIONAL_SHARE_DIALOG_NOTE, ADDITIONAL_APP_BOTTOM_LINKS, ADDITIONAL_ABOUT_DIALOG_LINKS, \ - DTABLE_WEB_SERVER + DTABLE_WEB_SERVER, SEADOC_SERVER_URL from seahub.ocm.settings import ENABLE_OCM, OCM_REMOTE_SERVERS from seahub.ocm_via_webdav.settings import ENABLE_OCM_VIA_WEBDAV @@ -655,6 +655,7 @@ def file_revisions(request, repo_id): if file_type == 'sdoc': file_uuid = get_seadoc_file_uuid(repo, path) + from seahub.seadoc.utils import gen_seadoc_access_token return render(request, 'sdoc_file_revisions.html', { 'repo': repo, 'path': path, @@ -664,7 +665,9 @@ def file_revisions(request, repo_id): 'is_owner': is_owner, 'can_compare': can_compare, 'can_revert_file': can_revert_file, - 'assets_url': '/api/v2.1/seadoc/download-image/' + file_uuid + 'assets_url': '/api/v2.1/seadoc/download-image/' + file_uuid, + 'seadoc_access_token': gen_seadoc_access_token(file_uuid, u_filename, username, permission='rw'), + 'seadoc_server_url' : SEADOC_SERVER_URL }) # Whether use new file history API which read file history from db.