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:
22
frontend/src/components/common/common-undo-tool.js
Normal file
22
frontend/src/components/common/common-undo-tool.js
Normal 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;
|
@@ -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) {
|
||||||
|
@@ -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}
|
||||||
|
@@ -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}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user