1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 07:27:04 +00:00

Optimize repo delete 2 (#4628)

* optimzie group repo delete logic

* repair code bug

* optimize repo delete code
This commit is contained in:
杨顺强
2020-07-27 11:06:59 +08:00
committed by GitHub
parent 25d58bb79f
commit f762b1a311
9 changed files with 98 additions and 56 deletions

View File

@@ -6,6 +6,7 @@ import { Utils } from '../../utils/utils';
const propTypes = { const propTypes = {
repo: PropTypes.object.isRequired, repo: PropTypes.object.isRequired,
isRepoDeleted: PropTypes.bool.isRequired,
toggle: PropTypes.func.isRequired, toggle: PropTypes.func.isRequired,
onDeleteRepo: PropTypes.func.isRequired, onDeleteRepo: PropTypes.func.isRequired,
}; };
@@ -19,6 +20,12 @@ class DeleteRepoDialog extends Component {
}; };
} }
componentWillReceiveProps(nextProps) {
if (!nextProps.isRepoDeleted) {
this.setState({isRequestSended: false});
}
}
toggle = () => { toggle = () => {
this.props.toggle(); this.props.toggle();
} }

View File

@@ -44,7 +44,8 @@ class SharedRepoListItem extends React.Component {
isHistorySettingDialogShow: false, isHistorySettingDialogShow: false,
isDeleteDialogShow: false, isDeleteDialogShow: false,
isAPITokenDialogShow: false, isAPITokenDialogShow: false,
isRepoShareUploadLinksDialogOpen: false isRepoShareUploadLinksDialogOpen: false,
isRepoDeleted: false,
}; };
this.isDeparementOnwerGroupMember = false; this.isDeparementOnwerGroupMember = false;
} }
@@ -187,6 +188,37 @@ class SharedRepoListItem extends React.Component {
this.setState({isDeleteDialogShow: !this.state.isDeleteDialogShow}); this.setState({isDeleteDialogShow: !this.state.isDeleteDialogShow});
} }
onItemDelete = () => {
const { currentGroup, repo } = this.props;
if (!currentGroup) { // repo can not be deleted in share all module
return;
}
const groupID = currentGroup.id;
seafileAPI.deleteGroupOwnedLibrary(groupID, repo.repo_id).then(() => {
this.setState({
isRepoDeleted: true,
isDeleteDialogShow: false,
});
this.props.onItemDelete(repo);
let name = repo.repo_name;
var msg = gettext('Successfully deleted {name}.').replace('{name}', name);
toaster.success(msg);
}).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
let name = repo.repo_name;
errMessage = gettext('Failed to delete {name}.').replace('{name}', name);
}
toaster.danger(errMessage);
this.setState({isRepoDeleted: false});
});
}
toggleShareDialog = () => { toggleShareDialog = () => {
this.setState({isShowSharedDialog: false}); this.setState({isShowSharedDialog: false});
} }
@@ -475,7 +507,8 @@ class SharedRepoListItem extends React.Component {
<ModalPortal> <ModalPortal>
<DeleteRepoDialog <DeleteRepoDialog
repo={this.props.repo} repo={this.props.repo}
onDeleteRepo={this.props.onItemDelete} isRepoDeleted={this.state.isRepoDeleted}
onDeleteRepo={this.onItemDelete}
toggle={this.onItemDeleteToggle} toggle={this.onItemDeleteToggle}
/> />
</ModalPortal> </ModalPortal>

View File

@@ -15,7 +15,7 @@ const propTypes = {
sortItems: PropTypes.func, sortItems: PropTypes.func,
repoList: PropTypes.array.isRequired, repoList: PropTypes.array.isRequired,
onItemUnshare: PropTypes.func.isRequired, onItemUnshare: PropTypes.func.isRequired,
onItemDelete: PropTypes.func.isRequired, onItemDelete: PropTypes.func,
onItemDetails: PropTypes.func, onItemDetails: PropTypes.func,
onItemRename: PropTypes.func, onItemRename: PropTypes.func,
}; };

View File

@@ -191,23 +191,11 @@ class GroupView extends React.Component {
onItemDelete = (repo) => { onItemDelete = (repo) => {
let groupID = this.props.groupID; let groupID = this.props.groupID;
seafileAPI.deleteGroupOwnedLibrary(groupID, repo.repo_id).then(() => { let repoList = this.state.repoList.filter(item => {
let repoList = this.state.repoList.filter(item => { return item.repo_id !== repo.repo_id;
return item.repo_id !== repo.repo_id;
});
this.setState({repoList: repoList});
this.loadGroup(groupID);
let name = repo.repo_name;
var msg = gettext('Successfully deleted {name}.').replace('{name}', name);
toaster.success(msg);
}).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
let name = repo.repo_name;
errMessage = gettext('Failed to delete {name}.').replace('{name}', name);
}
toaster.danger(errMessage);
}); });
this.setState({repoList: repoList});
this.loadGroup(groupID);
} }
addRepoItem = (repo) => { addRepoItem = (repo) => {

View File

@@ -53,23 +53,10 @@ class RepoListViewPanel extends React.Component {
} }
onItemDelete = (repo) => { onItemDelete = (repo) => {
let group = this.props.group; let repoList = this.state.repoList.filter(item => {
seafileAPI.deleteGroupOwnedLibrary(group.id, repo.repo_id).then(() => { return item.repo_id !== repo.repo_id;
let repoList = this.state.repoList.filter(item => {
return item.repo_id !== repo.repo_id;
});
this.setState({repoList: repoList});
let name = repo.repo_name;
var msg = gettext('Successfully deleted {name}.').replace('{name}', name);
toaster.success(msg);
}).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
let name = repo.repo_name;
errMessage = gettext('Failed to delete {name}.').replace('{name}', name);
}
toaster.danger(errMessage);
}); });
this.setState({repoList: repoList});
} }
onItemRename = (repo, newName) => { onItemRename = (repo, newName) => {

View File

@@ -49,7 +49,8 @@ class MylibRepoListItem extends React.Component {
isLabelRepoStateDialogOpen: false, isLabelRepoStateDialogOpen: false,
isFolderPermissionDialogShow: false, isFolderPermissionDialogShow: false,
isAPITokenDialogShow: false, isAPITokenDialogShow: false,
isRepoShareUploadLinksDialogOpen: false isRepoShareUploadLinksDialogOpen: false,
isRepoDeleted: false,
}; };
} }
@@ -232,6 +233,12 @@ class MylibRepoListItem extends React.Component {
onDeleteRepo = (repo) => { onDeleteRepo = (repo) => {
seafileAPI.deleteRepo(repo.repo_id).then((res) => { seafileAPI.deleteRepo(repo.repo_id).then((res) => {
this.setState({
isRepoDeleted: true,
isDeleteDialogShow: false,
});
this.props.onDeleteRepo(repo); this.props.onDeleteRepo(repo);
let name = repo.repo_name; let name = repo.repo_name;
var msg = gettext('Successfully deleted {name}.').replace('{name}', name); var msg = gettext('Successfully deleted {name}.').replace('{name}', name);
@@ -243,6 +250,8 @@ class MylibRepoListItem extends React.Component {
errMessage = gettext('Failed to delete {name}.').replace('{name}', name); errMessage = gettext('Failed to delete {name}.').replace('{name}', name);
} }
toaster.danger(errMessage); toaster.danger(errMessage);
this.setState({isRepoDeleted: false});
}); });
} }
@@ -364,6 +373,7 @@ class MylibRepoListItem extends React.Component {
<ModalPortal> <ModalPortal>
<DeleteRepoDialog <DeleteRepoDialog
repo={repo} repo={repo}
isRepoDeleted={this.state.isRepoDeleted}
onDeleteRepo={this.onDeleteRepo} onDeleteRepo={this.onDeleteRepo}
toggle={this.onDeleteToggle} toggle={this.onDeleteToggle}
/> />

View File

@@ -103,7 +103,8 @@ class Item extends Component {
this.state = { this.state = {
isOpIconShown: false, isOpIconShown: false,
deleted: false, deleted: false,
isDeleteRepoDialogOpen: false isDeleteRepoDialogOpen: false,
isRepoDeleted: false,
}; };
} }
@@ -134,13 +135,16 @@ class Item extends Component {
const repo = this.props.data; const repo = this.props.data;
seafileAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => { seafileAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => {
this.setState({ this.setState({
deleted: true deleted: true,
isRepoDeleted: true,
}); });
const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name); const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name);
toaster.success(msg); toaster.success(msg);
}).catch((error) => { }).catch((error) => {
const errorMsg = Utils.getErrorMsg(error); const errorMsg = Utils.getErrorMsg(error);
toaster.danger(errorMsg); toaster.danger(errorMsg);
this.setState({isRepoDeleted: false});
}); });
} }
@@ -165,13 +169,14 @@ class Item extends Component {
<a href="#" className={`action-icon sf2-icon-delete${isOpIconShown ? '' : ' invisible'}`} title={gettext('Delete')} onClick={this.handleDeleteIconClick}></a> <a href="#" className={`action-icon sf2-icon-delete${isOpIconShown ? '' : ' invisible'}`} title={gettext('Delete')} onClick={this.handleDeleteIconClick}></a>
</td> </td>
</tr> </tr>
{isDeleteRepoDialogOpen && {isDeleteRepoDialogOpen && (
<DeleteRepoDialog <DeleteRepoDialog
repo={repo} repo={repo}
onDeleteRepo={this.deleteRepo} isRepoDeleted={this.state.isRepoDeleted}
toggle={this.toggleDeleteRepoDialog} onDeleteRepo={this.deleteRepo}
/> toggle={this.toggleDeleteRepoDialog}
} />
)}
</Fragment> </Fragment>
); );
} }

View File

@@ -103,7 +103,8 @@ class Item extends Component {
this.state = { this.state = {
isOpIconShown: false, isOpIconShown: false,
deleted: false, deleted: false,
isDeleteRepoDialogOpen: false isDeleteRepoDialogOpen: false,
isRepoDeleted: false,
}; };
} }
@@ -134,13 +135,16 @@ class Item extends Component {
const repo = this.props.data; const repo = this.props.data;
seafileAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => { seafileAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => {
this.setState({ this.setState({
deleted: true deleted: true,
isRepoDeleted: true,
}); });
const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.repo_name); const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.repo_name);
toaster.success(msg); toaster.success(msg);
}).catch((error) => { }).catch((error) => {
const errorMsg = Utils.getErrorMsg(error); const errorMsg = Utils.getErrorMsg(error);
toaster.danger(errorMsg); toaster.danger(errorMsg);
this.setState({isRepoDeleted: false});
}); });
} }
@@ -165,13 +169,14 @@ class Item extends Component {
<a href="#" className={`action-icon sf2-icon-delete${isOpIconShown ? '' : ' invisible'}`} title={gettext('Delete')} onClick={this.handleDeleteIconClick}></a> <a href="#" className={`action-icon sf2-icon-delete${isOpIconShown ? '' : ' invisible'}`} title={gettext('Delete')} onClick={this.handleDeleteIconClick}></a>
</td> </td>
</tr> </tr>
{isDeleteRepoDialogOpen && {isDeleteRepoDialogOpen && (
<DeleteRepoDialog <DeleteRepoDialog
repo={repo} repo={repo}
onDeleteRepo={this.deleteRepo} isRepoDeleted={this.state.isRepoDeleted}
toggle={this.toggleDeleteRepoDialog} onDeleteRepo={this.deleteRepo}
/> toggle={this.toggleDeleteRepoDialog}
} />
)}
</Fragment> </Fragment>
); );
} }

View File

@@ -130,20 +130,26 @@ class Item extends Component {
isShareDialogOpen: false, isShareDialogOpen: false,
isDeleteDialogOpen: false, isDeleteDialogOpen: false,
isTransferDialogOpen: false, isTransferDialogOpen: false,
isHistorySettingDialogOpen: false isHistorySettingDialogOpen: false,
isRepoDeleted: false,
}; };
} }
onDeleteRepo = (repo) => { onDeleteRepo = (repo) => {
seafileAPI.sysAdminDeleteRepo(repo.id).then((res) => { seafileAPI.sysAdminDeleteRepo(repo.id).then((res) => {
this.props.onDeleteRepo(repo); this.props.onDeleteRepo(repo);
this.setState({
isDeleteDialogOpen: false,
isRepoDeleted: true,
});
const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name); const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name);
toaster.success(msg); toaster.success(msg);
}).catch((error) => { }).catch((error) => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage); toaster.danger(errMessage);
this.setState({isRepoDeleted: false});
}); });
this.toggleDeleteDialog();
} }
onTransferRepo = (owner) => { onTransferRepo = (owner) => {
@@ -325,6 +331,7 @@ class Item extends Component {
<ModalPortal> <ModalPortal>
<DeleteRepoDialog <DeleteRepoDialog
repo={repo} repo={repo}
isRepoDeleted={this.state.isRepoDeleted}
onDeleteRepo={this.onDeleteRepo} onDeleteRepo={this.onDeleteRepo}
toggle={this.toggleDeleteDialog} toggle={this.toggleDeleteDialog}
/> />