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:
@@ -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();
|
||||||
}
|
}
|
||||||
|
@@ -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>
|
||||||
|
@@ -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,
|
||||||
};
|
};
|
||||||
|
@@ -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) => {
|
||||||
|
@@ -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) => {
|
||||||
|
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
Reference in New Issue
Block a user