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 {