diff --git a/frontend/src/pages/wiki2/index.js b/frontend/src/pages/wiki2/index.js
index 5163b9e2fe..bfb0a0d765 100644
--- a/frontend/src/pages/wiki2/index.js
+++ b/frontend/src/pages/wiki2/index.js
@@ -5,7 +5,7 @@ import { Modal } from 'reactstrap';
import { Utils } from '../../utils/utils';
import wikiAPI from '../../utils/wiki-api';
import SDocServerApi from '../../utils/sdoc-server-api';
-import { wikiId, siteRoot, lang, isWiki2, seadocServerUrl } from '../../utils/constants';
+import { wikiId, siteRoot, lang, isWiki2, seadocServerUrl, gettext } from '../../utils/constants';
import WikiConfig from './models/wiki-config';
import toaster from '../../components/toast';
import SidePanel from './side-panel';
@@ -172,6 +172,19 @@ class Wiki extends Component {
});
};
+ onUpdatePage = (pageId, newPage) => {
+ if (newPage.name === '') {
+ toaster.danger(gettext('Page name cannot be empty'));
+ return;
+ }
+ const { config } = this.state
+ let pages = config.pages;
+ let currentPage = pages.find(page => page.id === pageId);
+ Object.assign(currentPage, newPage);
+ config.pages = pages;
+ this.saveWikiConfig(config);
+ };
+
render() {
return (
@@ -183,6 +196,7 @@ class Wiki extends Component {
saveWikiConfig={this.saveWikiConfig}
setCurrentPage={this.setCurrentPage}
currentPageId={this.state.currentPageId}
+ onUpdatePage={this.onUpdatePage}
/>
diff --git a/frontend/src/pages/wiki2/main-panel.js b/frontend/src/pages/wiki2/main-panel.js
index 1fbe42881f..8569b05458 100644
--- a/frontend/src/pages/wiki2/main-panel.js
+++ b/frontend/src/pages/wiki2/main-panel.js
@@ -1,11 +1,13 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { SdocWikiViewer } from '@seafile/sdoc-editor';
+import { Input } from 'reactstrap';
import { gettext, username } from '../../utils/constants';
import Loading from '../../components/loading';
import { Utils } from '../../utils/utils';
import Account from '../../components/common/account';
import WikiTopNav from './top-nav';
+import { getCurrentPageConfig } from './utils';
const propTypes = {
path: PropTypes.string.isRequired,
@@ -18,6 +20,7 @@ const propTypes = {
assets_url: PropTypes.string,
config: PropTypes.object,
currentPageId: PropTypes.string,
+ onUpdatePage: PropTypes.func,
};
class MainPanel extends Component {
@@ -26,36 +29,51 @@ class MainPanel extends Component {
super(props);
this.state = {
docUuid: '',
+ currentPageConfig: {},
};
}
static getDerivedStateFromProps(props, state) {
- const { seadoc_access_token } = props;
- const config = window.app.config;
+ const { seadoc_access_token, currentPageId, config } = props;
+ const appConfig = window.app.config;
const pageOptions = window.app.pageOptions;
const { assetsUrl, seadocServerUrl: sdocServer, } = window.wiki.config;
window.seafile = {
...window.seafile, // need docUuid
- ...config,
+ ...appConfig,
...pageOptions,
sdocServer,
assetsUrl: assetsUrl || props.assets_url,
accessToken: seadoc_access_token,
- serviceUrl: config.serviceURL,
- assets_url: config.assetsUrl,
+ serviceUrl: appConfig.serviceURL,
+ assets_url: appConfig.assetsUrl,
};
- return { ...props, docUuid: window.seafile.docUuid };
+ const currentPageConfig = getCurrentPageConfig(config.pages, currentPageId)
+ return { ...props, docUuid: window.seafile.docUuid, currentPageConfig };
+ }
+
+ handleRenameDocument = (e) => {
+ const newName = e.target.value.trim()
+ const { currentPageConfig } = this.state
+ const { id, name, icon } = currentPageConfig
+ if (newName === name) return;
+ const pageConfig = { name: newName, icon }
+ this.props.onUpdatePage(id, pageConfig)
+ // Reset title if name is empty
+ if (!newName) e.target.value = name;
}
render() {
- const { permission, pathExist, isDataLoading, isViewFile } = this.props;
+ const { permission, pathExist, isDataLoading, isViewFile, config } = this.props;
+ const { currentPageConfig } = this.state
const isViewingFile = pathExist && !isDataLoading && isViewFile;
const isReadOnly = !(permission === 'rw');
+
return (
{username &&
@@ -69,13 +87,14 @@ class MainPanel extends Component {
}
{this.props.pathExist && this.props.isDataLoading &&
}
{isViewingFile && Utils.isSdocFile(this.props.path) && (
-
+
+ }
+ />
+
)}
diff --git a/frontend/src/pages/wiki2/side-panel.js b/frontend/src/pages/wiki2/side-panel.js
index 068bbf0ec3..9122a0698c 100644
--- a/frontend/src/pages/wiki2/side-panel.js
+++ b/frontend/src/pages/wiki2/side-panel.js
@@ -28,6 +28,7 @@ const propTypes = {
saveWikiConfig: PropTypes.func.isRequired,
setCurrentPage: PropTypes.func.isRequired,
currentPageId: PropTypes.string,
+ onUpdatePage: PropTypes.func.isRequired,
};
class SidePanel extends Component {
@@ -101,19 +102,6 @@ class SidePanel extends Component {
this.props.saveWikiConfig(config, onSuccess, errorCallback);
};
- onUpdatePage = (pageId, newPage) => {
- if (newPage.name === '') {
- toaster.danger(gettext('Page name cannot be empty'));
- return;
- }
- const { config } = this.props;
- let pages = config.pages;
- let currentPage = pages.find(page => page.id === pageId);
- Object.assign(currentPage, newPage);
- config.pages = pages;
- this.props.saveWikiConfig(config);
- };
-
movePage = ({ moved_view_id, target_view_id, source_view_folder_id, target_view_folder_id, move_position }) => {
let config = deepCopy(this.props.config);
let { navigation } = config;
@@ -286,7 +274,7 @@ class SidePanel extends Component {
};
renderFolderView = () => {
- const { config } = this.props;
+ const { config, onUpdatePage } = this.props;
const { pages, navigation } = config;
return (
@@ -296,7 +284,7 @@ class SidePanel extends Component {
views={pages}
onToggleAddView={this.openAddPageDialog}
onDeleteView={this.confirmDeletePage}
- onUpdatePage={this.onUpdatePage}
+ onUpdatePage={onUpdatePage}
onSelectView={this.props.setCurrentPage}
onMoveView={this.movePage}
movePageOut={this.movePageOut}
diff --git a/frontend/src/pages/wiki2/utils/index.js b/frontend/src/pages/wiki2/utils/index.js
index 83c07a12ac..b9f8204adf 100644
--- a/frontend/src/pages/wiki2/utils/index.js
+++ b/frontend/src/pages/wiki2/utils/index.js
@@ -43,4 +43,8 @@ const getIconURL = (repoId, fileName) => {
return serviceURL + '/lib/' + repoId + '/file/_Internal/Wiki/Icon/' + fileName + '?raw=1';
};
-export { generatorBase64Code, generateUniqueId, isObjectNotEmpty, getIconURL };
+const getCurrentPageConfig = (pages,pageId) => {
+ return pages.filter(page => page.id === pageId)[0]
+}
+
+export { generatorBase64Code, generateUniqueId, isObjectNotEmpty, getIconURL,getCurrentPageConfig };
diff --git a/frontend/src/pages/wiki2/wiki.css b/frontend/src/pages/wiki2/wiki.css
index ce20b12497..7deebb512b 100644
--- a/frontend/src/pages/wiki2/wiki.css
+++ b/frontend/src/pages/wiki2/wiki.css
@@ -61,6 +61,13 @@ img[src=""] {
}
}
+.main-panel-center .cur-view-content .sf-wiki-title {
+ border: none;
+ padding: 0 50px;
+ padding-left: 142px;
+ font-weight: bold;
+ font-size: 26pt;
+}
/* reset article h1 */
.wiki2-main-panel .article h1 {
@@ -219,13 +226,17 @@ img[src=""] {
width: 100%;
}
+.sdoc-editor-container .sdoc-editor-content {
+ flex-direction: column;
+}
+
.sdoc-editor-container .sdoc-editor-content .article {
+ padding: 15px 142px 0px 142px;
width: 100%;
box-shadow: none;
border: none;
- padding: 52px 142px 0;
}
.sdoc-editor-container .sdoc-editor-content .sdoc-side-toolbar-container {
left: 100px !important;
-}
+}
\ No newline at end of file