mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-02 07:27:04 +00:00
Update wiki page (#6298)
* add wiki page * delete wiki page * update * move wiki page * optimize code * update * fix code format change error message --------- Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com> Co-authored-by: Michael An <2331806369@qq.com>
This commit is contained in:
@@ -7,8 +7,8 @@ import toaster from '../../components/toast';
|
||||
import Loading from '../../components/loading';
|
||||
import WikiNav from './wiki-nav/index';
|
||||
import PageUtils from './wiki-nav/page-utils';
|
||||
import { generateUniqueId, isObjectNotEmpty } from './utils';
|
||||
import Page from './models/page';
|
||||
import { isObjectNotEmpty } from './utils';
|
||||
import wikiAPI from '../../utils/wiki-api';
|
||||
import { Utils } from '../../utils/utils';
|
||||
import WikiExternalOperations from './wiki-external-operations';
|
||||
@@ -36,13 +36,16 @@ class SidePanel extends Component {
|
||||
|
||||
confirmDeletePage = (pageId) => {
|
||||
const config = deepCopy(this.props.config);
|
||||
const { pages, navigation } = config;
|
||||
const { pages } = config;
|
||||
const index = PageUtils.getPageIndexById(pageId, pages);
|
||||
config.pages.splice(index, 1);
|
||||
PageUtils.deletePage(navigation, pageId);
|
||||
this.props.saveWikiConfig(config);
|
||||
// TODO: delete a page, then delete all subpages
|
||||
wikiAPI.deleteWiki2Page(wikiId, pageId);
|
||||
// TODO: To delete a page, do you need to delete all subpages at once(update PageUtils delete a page)
|
||||
wikiAPI.deleteWiki2Page(wikiId, pageId).then((res) => {
|
||||
this.props.updateWikiConfig(config);
|
||||
}).catch((error) => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
});
|
||||
if (config.pages.length > 0) {
|
||||
this.props.setCurrentPage(config.pages[0].id);
|
||||
} else {
|
||||
@@ -50,19 +53,13 @@ class SidePanel extends Component {
|
||||
}
|
||||
};
|
||||
|
||||
addPageInside = async ({ parentPageId, name, icon, path, docUuid, successCallback, errorCallback }) => {
|
||||
const { config } = this.props;
|
||||
const navigation = config.navigation;
|
||||
const pageId = generateUniqueId(navigation);
|
||||
const newPage = new Page({ id: pageId, name, icon, path, docUuid });
|
||||
addPageInside = async ({ parentPageId, page_id, name, icon, path, docUuid, successCallback, errorCallback}) => {
|
||||
const newPage = new Page({ id: page_id, name, icon, path, docUuid });
|
||||
this.addPage(newPage, parentPageId, successCallback, errorCallback);
|
||||
};
|
||||
|
||||
onAddNewPage = async ({ name, icon, path, docUuid, successCallback, errorCallback, jumpToNewPage = true }) => {
|
||||
const { config } = this.props;
|
||||
const navigation = config.navigation;
|
||||
const pageId = generateUniqueId(navigation);
|
||||
const newPage = new Page({ id: pageId, name, icon, path, docUuid });
|
||||
onAddNewPage = async ({ name, icon, path, page_id, docUuid, successCallback, errorCallback, jumpToNewPage = true }) => {
|
||||
const newPage = new Page({ id: page_id, name, icon, path, docUuid });
|
||||
this.addPage(newPage, '', successCallback, errorCallback, jumpToNewPage);
|
||||
};
|
||||
|
||||
@@ -86,11 +83,10 @@ class SidePanel extends Component {
|
||||
config.pages.push(page);
|
||||
PageUtils.addPage(navigation, pageId, parentId);
|
||||
config.navigation = navigation;
|
||||
const onSuccess = () => {
|
||||
jumpToNewPage && this.props.setCurrentPage(pageId, successCallback);
|
||||
successCallback();
|
||||
};
|
||||
this.props.saveWikiConfig(config, onSuccess, errorCallback);
|
||||
JSON.stringify(config);
|
||||
this.props.updateWikiConfig(config);
|
||||
jumpToNewPage && this.props.setCurrentPage(pageId, successCallback);
|
||||
successCallback && successCallback();
|
||||
};
|
||||
|
||||
movePage = ({ moved_page_id, target_page_id, move_position }) => {
|
||||
@@ -98,7 +94,8 @@ class SidePanel extends Component {
|
||||
let { navigation } = config;
|
||||
PageUtils.movePage(navigation, moved_page_id, target_page_id, move_position);
|
||||
config.navigation = navigation;
|
||||
this.props.saveWikiConfig(config);
|
||||
JSON.stringify(config);
|
||||
this.props.updateWikiConfig(config);
|
||||
};
|
||||
|
||||
renderWikiNav = () => {
|
||||
@@ -115,6 +112,7 @@ class SidePanel extends Component {
|
||||
onUpdatePage={onUpdatePage}
|
||||
setCurrentPage={this.props.setCurrentPage}
|
||||
onMovePage={this.movePage}
|
||||
updateWikiConfig={this.props.updateWikiConfig}
|
||||
onAddNewPage={this.onAddNewPage}
|
||||
duplicatePage={this.duplicatePage}
|
||||
currentPageId={this.props.currentPageId}
|
||||
@@ -129,8 +127,9 @@ class SidePanel extends Component {
|
||||
handleAddNewPage = (jumpToNewPage = true, pageName = 'Untitled') => {
|
||||
const voidFn = () => void 0;
|
||||
wikiAPI.createWiki2Page(wikiId, pageName).then(res => {
|
||||
const { obj_name, parent_dir, doc_uuid, page_name } = res.data;
|
||||
const { page_id, obj_name, doc_uuid, parent_dir, page_name } = res.data.file_info;
|
||||
this.onAddNewPage({
|
||||
page_id: page_id,
|
||||
name: page_name,
|
||||
icon: '',
|
||||
path: parent_dir === '/' ? `/${obj_name}` : `${parent_dir}/${obj_name}`,
|
||||
@@ -142,7 +141,6 @@ class SidePanel extends Component {
|
||||
}).catch((error) => {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
this.onError();
|
||||
});
|
||||
};
|
||||
|
||||
|
@@ -13,6 +13,7 @@ const propTypes = {
|
||||
title: PropTypes.node,
|
||||
toggle: PropTypes.func.isRequired,
|
||||
onAddNewPage: PropTypes.func,
|
||||
currentPageId: PropTypes.string,
|
||||
};
|
||||
|
||||
|
||||
@@ -70,9 +71,10 @@ class AddNewPageDialog extends React.Component {
|
||||
};
|
||||
|
||||
createPage = (pageName) => {
|
||||
wikiAPI.createWiki2Page(wikiId, pageName).then(res => {
|
||||
const { obj_name, parent_dir, doc_uuid } = res.data;
|
||||
wikiAPI.createWiki2Page(wikiId, pageName, this.props.currentPageId).then(res => {
|
||||
const { page_id, obj_name, doc_uuid, parent_dir } = res.data.file_info;
|
||||
this.props.onAddNewPage({
|
||||
page_id: page_id,
|
||||
name: pageName,
|
||||
icon: '',
|
||||
path: parent_dir === '/' ? `/${obj_name}` : `${parent_dir}/${obj_name}`,
|
||||
|
@@ -103,11 +103,16 @@ export default class PageUtils {
|
||||
}
|
||||
function _insertPageRecursion(item, page_id, target_page_id, target_id, move_position) {
|
||||
if (item.id === target_id) {
|
||||
let insertIndex = target_page_id ? item.children.findIndex(item => item.id === target_page_id) : -1;
|
||||
if (move_position === 'move_below') {
|
||||
insertIndex++;
|
||||
if (item.children) {
|
||||
let insertIndex = target_page_id ? item.children.findIndex(item => item.id === target_page_id) : -1;
|
||||
if (move_position === 'move_below') {
|
||||
insertIndex++;
|
||||
}
|
||||
item.children.splice(insertIndex, 0, movedPage);
|
||||
} else {
|
||||
item.children = [];
|
||||
item.children.push(movedPage);
|
||||
}
|
||||
item.children.splice(insertIndex, 0, movedPage);
|
||||
return;
|
||||
}
|
||||
item.children && item.children.forEach(item => {
|
||||
|
@@ -1,5 +1,9 @@
|
||||
import { DragSource, DropTarget } from 'react-dnd';
|
||||
import PageItem from './page-item';
|
||||
import wikiAPI from '../../../../utils/wiki-api';
|
||||
import { wikiId, gettext } from '../../../../utils/constants';
|
||||
import { Utils } from '../../../../utils/utils';
|
||||
import toaster from '../../../../components/toast';
|
||||
|
||||
const dragSource = {
|
||||
beginDrag: props => {
|
||||
@@ -34,10 +38,19 @@ const dropTarget = {
|
||||
if (draggedPageId !== targetPageId) {
|
||||
const sourceIndex = dragSource.idx;
|
||||
const move_position = sourceIndex > targetIndex ? 'move_above' : 'move_below';
|
||||
props.onMovePage({
|
||||
moved_page_id: draggedPageId,
|
||||
target_page_id: targetPageId,
|
||||
move_position,
|
||||
wikiAPI.moveWiki2Page(wikiId, draggedPageId, targetPageId, move_position).then(res => {
|
||||
props.onMovePage({
|
||||
moved_page_id: draggedPageId,
|
||||
target_page_id: targetPageId,
|
||||
move_position,
|
||||
});
|
||||
}).catch((error) => {
|
||||
if (error.response && error.response.status === 400 && error.response.data.error_msg === 'Internal Server Error') {
|
||||
toaster.danger(gettext('Cannot move parent page to child page'));
|
||||
} else {
|
||||
let errMessage = Utils.getErrorMsg(error);
|
||||
toaster.danger(errMessage);
|
||||
}
|
||||
});
|
||||
}
|
||||
return;
|
||||
|
@@ -143,6 +143,7 @@ class PageItem extends Component {
|
||||
onUpdatePage={this.props.onUpdatePage}
|
||||
onDeletePage={this.props.onDeletePage}
|
||||
onMovePage={this.props.onMovePage}
|
||||
updateWikiConfig={this.props.updateWikiConfig}
|
||||
pages={pages}
|
||||
pathStr={pathStr + '-' + page.id}
|
||||
currentPageId={this.props.currentPageId}
|
||||
@@ -252,6 +253,7 @@ class PageItem extends Component {
|
||||
{this.state.isShowInsertPage &&
|
||||
<AddNewPageDialog
|
||||
toggle={this.toggleInsertPage}
|
||||
currentPageId={this.props.page.id}
|
||||
onAddNewPage={this.onAddNewPage}
|
||||
title={gettext('Add page inside')}
|
||||
/>
|
||||
@@ -300,6 +302,7 @@ PageItem.propTypes = {
|
||||
addPageInside: PropTypes.func,
|
||||
getFoldState: PropTypes.func,
|
||||
toggleExpand: PropTypes.func,
|
||||
updateWikiConfig: PropTypes.func,
|
||||
};
|
||||
|
||||
export default PageItem;
|
||||
|
@@ -21,6 +21,7 @@ class WikiNav extends Component {
|
||||
duplicatePage: PropTypes.func,
|
||||
currentPageId: PropTypes.string,
|
||||
addPageInside: PropTypes.func,
|
||||
updateWikiConfig: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
@@ -70,6 +71,7 @@ class WikiNav extends Component {
|
||||
onUpdatePage={this.props.onUpdatePage}
|
||||
onDeletePage={this.props.onDeletePage}
|
||||
onMovePage={this.props.onMovePage}
|
||||
updateWikiConfig={this.props.updateWikiConfig}
|
||||
pathStr={page.id}
|
||||
currentPageId={this.props.currentPageId}
|
||||
addPageInside={this.props.addPageInside}
|
||||
|
@@ -191,6 +191,16 @@ class WikiAPI {
|
||||
return this.req.delete(url);
|
||||
}
|
||||
|
||||
moveWiki2Page(wikiId, moved_id, target_id, move_position) {
|
||||
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/pages/';
|
||||
let params = {
|
||||
'moved_id': moved_id,
|
||||
'target_id': target_id,
|
||||
'move_position': move_position
|
||||
};
|
||||
return this.req.put(url, params);
|
||||
}
|
||||
|
||||
deleteWiki2Folder(wikiId, folderId) {
|
||||
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/folder/' + folderId + '/';
|
||||
return this.req.delete(url);
|
||||
|
Reference in New Issue
Block a user