1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-15 14:49:09 +00:00

Change delete wiki page UI (#7171)

* change delete wiki page UI

* optimise codes

* fix text
This commit is contained in:
Michael An
2024-12-11 10:09:16 +08:00
committed by GitHub
parent d9c9779327
commit fc05e4827d
7 changed files with 53 additions and 25 deletions

View File

@@ -0,0 +1,22 @@
import React from 'react';
import PropTypes from 'prop-types';
import { gettext } from '../../utils/constants';
function CommonUndoTool(props) {
const style = {
color: 'rgb(71, 184, 129)',
marginLeft: '8px',
paddingBottom: '1px',
borderBottom: '1px solid rgb(71, 184, 129)',
cursor: 'pointer',
};
return (
<span onClick={(e) => {e.stopPropagation(); props.onUndoOperation(e);}} style={style}>{gettext('Undo')}</span>
);
}
CommonUndoTool.propTypes = {
onUndoOperation: PropTypes.func.isRequired,
};
export default CommonUndoTool;

View File

@@ -358,7 +358,7 @@ class Item extends React.Component {
this.setState({ this.setState({
restored: true restored: true
}); });
toaster.success(gettext('Successfully restored 1 item.')); toaster.success(gettext('Restored 1 item'));
}).catch((error) => { }).catch((error) => {
let errorMsg = ''; let errorMsg = '';
if (error.response) { if (error.response) {

View File

@@ -2,7 +2,7 @@ import React, { PureComponent } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import deepCopy from 'deep-copy'; import deepCopy from 'deep-copy';
import classNames from 'classnames'; import classNames from 'classnames';
import { isWiki2, wikiId, wikiPermission } from '../../utils/constants'; import { isWiki2, wikiId, wikiPermission, gettext } from '../../utils/constants';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
import Loading from '../../components/loading'; import Loading from '../../components/loading';
import WikiNav from './wiki-nav/index'; import WikiNav from './wiki-nav/index';
@@ -15,6 +15,7 @@ import WikiExternalOperations from './wiki-external-operations';
import WikiTrashDialog from './wiki-trash-dialog'; import WikiTrashDialog from './wiki-trash-dialog';
import { DEFAULT_PAGE_NAME } from './constant'; import { DEFAULT_PAGE_NAME } from './constant';
import Wiki2Search from '../../components/search/wiki2-search'; import Wiki2Search from '../../components/search/wiki2-search';
import CommonUndoTool from '../../components/common/common-undo-tool';
import './side-panel.css'; import './side-panel.css';
@@ -40,14 +41,21 @@ class SidePanel extends PureComponent {
}; };
} }
confirmDeletePage = (pageId) => { onDeletePage = (pageId) => {
const config = deepCopy(this.props.config); const config = deepCopy(this.props.config);
const { pages } = config; const { pages } = config;
const index = PageUtils.getPageIndexById(pageId, pages); const index = PageUtils.getPageIndexById(pageId, pages);
const deletePageName = pages[index].name;
config.pages.splice(index, 1); config.pages.splice(index, 1);
wikiAPI.deleteWiki2Page(wikiId, pageId).then((res) => { wikiAPI.deleteWiki2Page(wikiId, pageId).then((res) => {
if (res.data.success === true) { if (res.data.success === true) {
this.props.updateWikiConfig(config); this.props.updateWikiConfig(config);
toaster.success(
<span>
{gettext('Page xxx deleted.').replace('xxx', deletePageName)}
<CommonUndoTool onUndoOperation={() => this.revertWikiPage(pageId)} />
</span>
);
} }
}).catch((error) => { }).catch((error) => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);
@@ -59,6 +67,19 @@ class SidePanel extends PureComponent {
} }
}; };
revertWikiPage = (pageId) => {
wikiAPI.revertTrashPage(wikiId, pageId).then(res => {
if (res.data.success === true) {
this.props.getWikiConfig();
toaster.closeAll();
toaster.success(gettext('Restored 1 item'));
}
}).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
});
};
addPageInside = async ({ parentPageId, page_id, name, icon, path, docUuid, successCallback, errorCallback }) => { addPageInside = async ({ parentPageId, page_id, name, icon, path, docUuid, successCallback, errorCallback }) => {
const newPage = new Page({ id: page_id, name, icon, path, docUuid }); const newPage = new Page({ id: page_id, name, icon, path, docUuid });
this.addPage(newPage, parentPageId, successCallback, errorCallback); this.addPage(newPage, parentPageId, successCallback, errorCallback);
@@ -130,7 +151,7 @@ class SidePanel extends PureComponent {
isEditMode={isWiki2} isEditMode={isWiki2}
navigation={navigation} navigation={navigation}
pages={pages} pages={pages}
onDeletePage={this.confirmDeletePage} onDeletePage={this.onDeletePage}
onUpdatePage={onUpdatePage} onUpdatePage={onUpdatePage}
setCurrentPage={this.props.setCurrentPage} setCurrentPage={this.props.setCurrentPage}
onMovePage={this.movePage} onMovePage={this.movePage}

View File

@@ -4,7 +4,6 @@ import classnames from 'classnames';
import NameEditPopover from '../../common/name-edit-popover'; import NameEditPopover from '../../common/name-edit-popover';
import NavItemIcon from '../../common/nav-item-icon'; import NavItemIcon from '../../common/nav-item-icon';
import PageDropdownMenu from './page-dropdownmenu'; import PageDropdownMenu from './page-dropdownmenu';
import DeleteDialog from '../../common/delete-dialog';
import { gettext, wikiPermission } from '../../../../utils/constants'; import { gettext, wikiPermission } from '../../../../utils/constants';
import AddNewPageDialog from '../add-new-page-dialog'; import AddNewPageDialog from '../add-new-page-dialog';
import Icon from '../../../../components/icon'; import Icon from '../../../../components/icon';
@@ -20,7 +19,6 @@ class PageItem extends Component {
this.state = { this.state = {
isShowNameEditor: false, isShowNameEditor: false,
isShowOperationDropdown: false, isShowOperationDropdown: false,
isShowDeleteDialog: false,
isShowInsertPage: false, isShowInsertPage: false,
isShowAddSiblingPage: false, isShowAddSiblingPage: false,
insertPosition: '', insertPosition: '',
@@ -100,14 +98,6 @@ class PageItem extends Component {
this.setState({ pageName: newName }); this.setState({ pageName: newName });
}; };
openDeleteDialog = () => {
this.setState({ isShowDeleteDialog: true });
};
closeDeleteDialog = () => {
this.setState({ isShowDeleteDialog: false });
};
toggleDropdown = () => { toggleDropdown = () => {
const isShowOperationDropdown = !this.state.isShowOperationDropdown; const isShowOperationDropdown = !this.state.isShowOperationDropdown;
this.setState({ isShowOperationDropdown }); this.setState({ isShowOperationDropdown });
@@ -277,7 +267,7 @@ class PageItem extends Component {
toggle={this.toggleDropdown} toggle={this.toggleDropdown}
toggleNameEditor={this.toggleNameEditor} toggleNameEditor={this.toggleNameEditor}
duplicatePage={this.props.duplicatePage} duplicatePage={this.props.duplicatePage}
onDeletePage={this.openDeleteDialog} onDeletePage={this.props.onDeletePage.bind(this, page.id)}
toggleInsertSiblingPage={this.toggleInsertSiblingPage} toggleInsertSiblingPage={this.toggleInsertSiblingPage}
/> />
} }
@@ -288,12 +278,6 @@ class PageItem extends Component {
</> </>
} }
</div> </div>
{this.state.isShowDeleteDialog &&
<DeleteDialog
closeDeleteDialog={this.closeDeleteDialog}
handleSubmit={this.props.onDeletePage.bind(this, page.id)}
/>
}
{this.state.isShowInsertPage && {this.state.isShowInsertPage &&
<AddNewPageDialog <AddNewPageDialog
toggle={this.toggleInsertPage} toggle={this.toggleInsertPage}

View File

@@ -62,6 +62,7 @@ class WikiTrashDialog extends React.Component {
this.getItems(1); this.getItems(1);
}); });
}; };
cleanTrash = () => { cleanTrash = () => {
this.toggleCleanTrashDialog(); this.toggleCleanTrashDialog();
}; };
@@ -225,7 +226,8 @@ class Item extends React.Component {
restored: true restored: true
}); });
this.props.getWikiConfig(); this.props.getWikiConfig();
toaster.success(gettext('Successfully restored 1 item.')); toaster.closeAll();
toaster.success(gettext('Restored 1 item'));
}).catch((error) => { }).catch((error) => {
let errorMsg = ''; let errorMsg = '';
if (error.response) { if (error.response) {
@@ -237,7 +239,6 @@ class Item extends React.Component {
}); });
}; };
render() { render() {
const item = this.props.item; const item = this.props.item;
const { restored, isIconShown } = this.state; const { restored, isIconShown } = this.state;

View File

@@ -327,7 +327,7 @@ class Item extends React.Component {
this.setState({ this.setState({
restored: true restored: true
}); });
toaster.success(gettext('Successfully restored 1 item.')); toaster.success(gettext('Restored 1 item'));
}).catch((error) => { }).catch((error) => {
let errorMsg = ''; let errorMsg = '';
if (error.response) { if (error.response) {

View File

@@ -270,7 +270,7 @@ class FolderItem extends React.Component {
seafileAPI.revertFolder(repoID, path, commitID) : seafileAPI.revertFolder(repoID, path, commitID) :
seafileAPI.revertFile(repoID, path, commitID); seafileAPI.revertFile(repoID, path, commitID);
request.then((res) => { request.then((res) => {
toaster.success(gettext('Successfully restored 1 item.')); toaster.success(gettext('Restored 1 item'));
}).catch((error) => { }).catch((error) => {
let errorMsg = Utils.getErrorMsg(error); let errorMsg = Utils.getErrorMsg(error);
toaster.danger(errorMsg); toaster.danger(errorMsg);