diff --git a/frontend/src/components/dialog/delete-repo-dialog.js b/frontend/src/components/dialog/delete-repo-dialog.js index 212a415073..073ac4134b 100644 --- a/frontend/src/components/dialog/delete-repo-dialog.js +++ b/frontend/src/components/dialog/delete-repo-dialog.js @@ -6,6 +6,7 @@ import { Utils } from '../../utils/utils'; const propTypes = { repo: PropTypes.object.isRequired, + isRepoDeleted: PropTypes.bool.isRequired, toggle: 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 = () => { this.props.toggle(); } diff --git a/frontend/src/components/shared-repo-list-view/shared-repo-list-item.js b/frontend/src/components/shared-repo-list-view/shared-repo-list-item.js index e7ed2cfdb7..7aed0570e0 100644 --- a/frontend/src/components/shared-repo-list-view/shared-repo-list-item.js +++ b/frontend/src/components/shared-repo-list-view/shared-repo-list-item.js @@ -44,7 +44,8 @@ class SharedRepoListItem extends React.Component { isHistorySettingDialogShow: false, isDeleteDialogShow: false, isAPITokenDialogShow: false, - isRepoShareUploadLinksDialogOpen: false + isRepoShareUploadLinksDialogOpen: false, + isRepoDeleted: false, }; this.isDeparementOnwerGroupMember = false; } @@ -187,6 +188,37 @@ class SharedRepoListItem extends React.Component { 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 = () => { this.setState({isShowSharedDialog: false}); } @@ -475,7 +507,8 @@ class SharedRepoListItem extends React.Component { diff --git a/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js b/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js index c45efca31d..7539e2849c 100644 --- a/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js +++ b/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js @@ -15,7 +15,7 @@ const propTypes = { sortItems: PropTypes.func, repoList: PropTypes.array.isRequired, onItemUnshare: PropTypes.func.isRequired, - onItemDelete: PropTypes.func.isRequired, + onItemDelete: PropTypes.func, onItemDetails: PropTypes.func, onItemRename: PropTypes.func, }; diff --git a/frontend/src/pages/groups/group-view.js b/frontend/src/pages/groups/group-view.js index 5883632c36..5e4ecc044c 100644 --- a/frontend/src/pages/groups/group-view.js +++ b/frontend/src/pages/groups/group-view.js @@ -191,23 +191,11 @@ class GroupView extends React.Component { onItemDelete = (repo) => { let groupID = this.props.groupID; - seafileAPI.deleteGroupOwnedLibrary(groupID, repo.repo_id).then(() => { - let repoList = this.state.repoList.filter(item => { - 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); + let repoList = this.state.repoList.filter(item => { + return item.repo_id !== repo.repo_id; }); + this.setState({repoList: repoList}); + this.loadGroup(groupID); } addRepoItem = (repo) => { diff --git a/frontend/src/pages/groups/groups-view.js b/frontend/src/pages/groups/groups-view.js index caffef5c0a..5fe367d673 100644 --- a/frontend/src/pages/groups/groups-view.js +++ b/frontend/src/pages/groups/groups-view.js @@ -53,23 +53,10 @@ class RepoListViewPanel extends React.Component { } onItemDelete = (repo) => { - let group = this.props.group; - seafileAPI.deleteGroupOwnedLibrary(group.id, repo.repo_id).then(() => { - 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); + let repoList = this.state.repoList.filter(item => { + return item.repo_id !== repo.repo_id; }); + this.setState({repoList: repoList}); } onItemRename = (repo, newName) => { diff --git a/frontend/src/pages/my-libs/mylib-repo-list-item.js b/frontend/src/pages/my-libs/mylib-repo-list-item.js index ab7588524a..3064ffc601 100644 --- a/frontend/src/pages/my-libs/mylib-repo-list-item.js +++ b/frontend/src/pages/my-libs/mylib-repo-list-item.js @@ -49,7 +49,8 @@ class MylibRepoListItem extends React.Component { isLabelRepoStateDialogOpen: false, isFolderPermissionDialogShow: false, isAPITokenDialogShow: false, - isRepoShareUploadLinksDialogOpen: false + isRepoShareUploadLinksDialogOpen: false, + isRepoDeleted: false, }; } @@ -232,6 +233,12 @@ class MylibRepoListItem extends React.Component { onDeleteRepo = (repo) => { seafileAPI.deleteRepo(repo.repo_id).then((res) => { + + this.setState({ + isRepoDeleted: true, + isDeleteDialogShow: false, + }); + this.props.onDeleteRepo(repo); let name = repo.repo_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); } toaster.danger(errMessage); + + this.setState({isRepoDeleted: false}); }); } @@ -364,6 +373,7 @@ class MylibRepoListItem extends React.Component { diff --git a/frontend/src/pages/org-admin/org-group-repos.js b/frontend/src/pages/org-admin/org-group-repos.js index c8a446cc91..849363b768 100644 --- a/frontend/src/pages/org-admin/org-group-repos.js +++ b/frontend/src/pages/org-admin/org-group-repos.js @@ -103,7 +103,8 @@ class Item extends Component { this.state = { isOpIconShown: false, deleted: false, - isDeleteRepoDialogOpen: false + isDeleteRepoDialogOpen: false, + isRepoDeleted: false, }; } @@ -134,13 +135,16 @@ class Item extends Component { const repo = this.props.data; seafileAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => { this.setState({ - deleted: true + deleted: true, + isRepoDeleted: true, }); const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name); toaster.success(msg); }).catch((error) => { const errorMsg = Utils.getErrorMsg(error); toaster.danger(errorMsg); + + this.setState({isRepoDeleted: false}); }); } @@ -165,13 +169,14 @@ class Item extends Component { - {isDeleteRepoDialogOpen && - - } + {isDeleteRepoDialogOpen && ( + + )} ); } diff --git a/frontend/src/pages/org-admin/org-user-repos.js b/frontend/src/pages/org-admin/org-user-repos.js index 69620ea499..2540dd9a3f 100644 --- a/frontend/src/pages/org-admin/org-user-repos.js +++ b/frontend/src/pages/org-admin/org-user-repos.js @@ -103,7 +103,8 @@ class Item extends Component { this.state = { isOpIconShown: false, deleted: false, - isDeleteRepoDialogOpen: false + isDeleteRepoDialogOpen: false, + isRepoDeleted: false, }; } @@ -134,13 +135,16 @@ class Item extends Component { const repo = this.props.data; seafileAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => { this.setState({ - deleted: true + deleted: true, + isRepoDeleted: true, }); const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.repo_name); toaster.success(msg); }).catch((error) => { const errorMsg = Utils.getErrorMsg(error); toaster.danger(errorMsg); + + this.setState({isRepoDeleted: false}); }); } @@ -165,13 +169,14 @@ class Item extends Component { - {isDeleteRepoDialogOpen && - - } + {isDeleteRepoDialogOpen && ( + + )} ); } diff --git a/frontend/src/pages/sys-admin/repos/repos.js b/frontend/src/pages/sys-admin/repos/repos.js index 04de30e130..f0d6004e57 100644 --- a/frontend/src/pages/sys-admin/repos/repos.js +++ b/frontend/src/pages/sys-admin/repos/repos.js @@ -130,20 +130,26 @@ class Item extends Component { isShareDialogOpen: false, isDeleteDialogOpen: false, isTransferDialogOpen: false, - isHistorySettingDialogOpen: false + isHistorySettingDialogOpen: false, + isRepoDeleted: false, }; } onDeleteRepo = (repo) => { seafileAPI.sysAdminDeleteRepo(repo.id).then((res) => { this.props.onDeleteRepo(repo); + this.setState({ + isDeleteDialogOpen: false, + isRepoDeleted: true, + }); const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name); toaster.success(msg); }).catch((error) => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); + + this.setState({isRepoDeleted: false}); }); - this.toggleDeleteDialog(); } onTransferRepo = (owner) => { @@ -325,6 +331,7 @@ class Item extends Component {