1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 23:48:47 +00:00

Merge pull request #6904 from haiwen/dep-repo-transfer

Department admin transfer depRepo
This commit is contained in:
Ranjiwei
2024-10-25 11:50:45 +08:00
committed by GitHub
9 changed files with 282 additions and 16 deletions

View File

@@ -28,6 +28,8 @@ const propTypes = {
canTransferToDept: PropTypes.bool,
isOrgAdmin: PropTypes.bool,
isSysAdmin: PropTypes.bool,
isDepAdminTransfer: PropTypes.bool,
};
const TRANS_USER = 'transUser';
@@ -41,7 +43,7 @@ class TransferDialog extends React.Component {
errorMsg: [],
transferToUser: true,
transferToGroup: false,
activeTab: TRANS_USER
activeTab: !this.props.isDepAdminTransfer ? TRANS_USER : TRANS_DEPART
};
this.options = [];
}
@@ -131,16 +133,18 @@ class TransferDialog extends React.Component {
<Fragment>
<div className="transfer-dialog-side">
<Nav pills>
<NavItem role="tab" aria-selected={activeTab === TRANS_USER} aria-controls="transfer-user-panel">
<NavLink
className={activeTab === TRANS_USER ? 'active' : ''}
onClick={(this.toggle.bind(this, TRANS_USER))}
tabIndex="0"
onKeyDown={this.onTabKeyDown}
>
{gettext('Transfer to user')}
</NavLink>
</NavItem>
{!this.props.isDepAdminTransfer &&
<NavItem role="tab" aria-selected={activeTab === TRANS_USER} aria-controls="transfer-user-panel">
<NavLink
className={activeTab === TRANS_USER ? 'active' : ''}
onClick={(this.toggle.bind(this, TRANS_USER))}
tabIndex="0"
onKeyDown={this.onTabKeyDown}
>
{gettext('Transfer to user')}
</NavLink>
</NavItem>
}
{isPro &&
<NavItem role="tab" aria-selected={activeTab === TRANS_DEPART} aria-controls="transfer-depart-panel">
<NavLink

View File

@@ -15,12 +15,14 @@ import ResetEncryptedRepoPasswordDialog from '../../components/dialog/reset-encr
import LibOldFilesAutoDelDialog from '../../components/dialog/lib-old-files-auto-del-dialog';
import Rename from '../rename';
import { seafileAPI } from '../../utils/seafile-api';
import { userAPI } from '../../utils/user-api';
import LibHistorySettingDialog from '../dialog/lib-history-setting-dialog';
import toaster from '../toast';
import RepoAPITokenDialog from '../dialog/repo-api-token-dialog';
import RepoShareAdminDialog from '../dialog/repo-share-admin-dialog';
import RepoMonitoredIcon from '../../components/repo-monitored-icon';
import { GRID_MODE, LIST_MODE } from '../dir-view-mode/constants';
import TransferDialog from '../dialog/transfer-dialog';
dayjs.extend(relativeTime);
@@ -37,6 +39,7 @@ const propTypes = {
onItemDelete: PropTypes.func,
onMonitorRepo: PropTypes.func,
onContextMenu: PropTypes.func.isRequired,
onTransferRepo: PropTypes.func
};
class SharedRepoListItem extends React.Component {
@@ -55,6 +58,7 @@ class SharedRepoListItem extends React.Component {
isHistorySettingDialogShow: false,
isDeleteDialogShow: false,
isAPITokenDialogShow: false,
isTransferDialogShow: false,
isRepoShareAdminDialogOpen: false,
isRepoDeleted: false,
isChangePasswordDialogShow: false,
@@ -166,6 +170,9 @@ class SharedRepoListItem extends React.Component {
case 'Rename':
this.onItemRenameToggle();
break;
case 'Transfer':
this.onTransferToggle();
break;
case 'Folder Permission':
this.onItemFolderPermissionToggle();
break;
@@ -231,6 +238,27 @@ class SharedRepoListItem extends React.Component {
});
};
onTransferToggle = () => {
this.setState({ isTransferDialogShow: !this.state.isTransferDialogShow });
};
onTransferRepo = (user) => {
let repoID = this.props.repo.repo_id;
let groupID = this.props.currentGroup.id;
userAPI.depAdminTransferRepo(repoID, groupID, user.email).then(res => {
this.props.onTransferRepo(repoID, groupID, user.email);
let message = gettext('Successfully transferred the library.');
toaster.success(message);
}).catch(error => {
if (error.response) {
toaster.danger(error.response.data.error_msg || gettext('Error'), { duration: 3 });
} else {
toaster.danger(gettext('Failed. Please check the network.'), { duration: 3 });
}
});
this.onTransferToggle();
};
onRenameConfirm = (name) => {
this.props.onItemRename(this.props.repo, name);
this.onRenameCancel();
@@ -322,6 +350,9 @@ class SharedRepoListItem extends React.Component {
case 'Rename':
translateResult = gettext('Rename');
break;
case 'Transfer':
translateResult = gettext('Transfer');
break;
case 'Folder Permission':
translateResult = gettext('Folder Permission');
break;
@@ -389,7 +420,7 @@ class SharedRepoListItem extends React.Component {
if (isStaff) {
if (repo.owner_email == currentGroup.id + '@seafile_group') {
this.isDeparementOnwerGroupMember = true;
operations = ['Rename'];
operations = ['Rename', 'Transfer'];
if (folderPermEnabled) {
operations.push('Folder Permission');
}
@@ -822,6 +853,17 @@ class SharedRepoListItem extends React.Component {
/>
</ModalPortal>
)}
{this.state.isTransferDialogShow && (
<ModalPortal>
<TransferDialog
itemName={repo.repo_name}
submit={this.onTransferRepo}
canTransferToDept={true}
toggleDialog={this.onTransferToggle}
isDepAdminTransfer={true}
/>
</ModalPortal>
)}
</Fragment>
);
}

View File

@@ -26,6 +26,7 @@ const propTypes = {
onMonitorRepo: PropTypes.func,
theadHidden: PropTypes.bool,
inAllLibs: PropTypes.bool,
onTransferRepo: PropTypes.func,
};
class SharedRepoListView extends React.Component {
@@ -131,6 +132,7 @@ class SharedRepoListView extends React.Component {
isItemFreezed={this.state.isItemFreezed}
onFreezedItem={this.onFreezedItem}
onUnfreezedItem={this.onUnfreezedItem}
onTransferRepo={this.props.onTransferRepo}
onItemUnshare={this.props.onItemUnshare}
onItemDelete={this.props.onItemDelete}
onItemRename={this.props.onItemRename}