diff --git a/frontend/src/pages/sys-admin/repos/trash-repos.js b/frontend/src/pages/sys-admin/repos/trash-repos.js index 609dfdcdbd..1323890e0d 100644 --- a/frontend/src/pages/sys-admin/repos/trash-repos.js +++ b/frontend/src/pages/sys-admin/repos/trash-repos.js @@ -9,6 +9,7 @@ import EmptyTip from '../../../components/empty-tip'; import Loading from '../../../components/loading'; import Paginator from '../../../components/paginator'; import ModalPortal from '../../../components/modal-portal'; +import OpMenu from '../../../components/dialog/op-menu'; import CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog'; import MainPanelTopbar from '../main-panel-topbar'; import Search from '../search'; @@ -21,6 +22,17 @@ class Content extends Component { constructor(props) { super(props); + this.state = { + isItemFreezed: false + }; + } + + onFreezedItem = () => { + this.setState({isItemFreezed: true}); + } + + onUnfreezedItem = () => { + this.setState({isItemFreezed: false}); } getPreviousPageList = () => { @@ -50,10 +62,10 @@ class Content extends Component { {/*icon*/} - {gettext('Name')} - {gettext('Owner')} + {gettext('Name')} + {gettext('Owner')} {gettext('Deleted Time')} - {/*Operations*/} + {/*Operations*/} @@ -61,6 +73,9 @@ class Content extends Component { return (); @@ -89,12 +104,39 @@ class Item extends Component { constructor(props) { super(props); this.state = { + highlight: false, isOpIconShown: false, isDeleteRepoDialogOpen: false, isRestoreRepoDialogOpen: false }; } + handleMouseOver = () => { + if (!this.props.isItemFreezed) { + this.setState({ + isOpIconShown: true, + highlight: true + }); + } + } + + handleMouseOut = () => { + if (!this.props.isItemFreezed) { + this.setState({ + isOpIconShown: false, + highlight: false + }); + } + } + + onUnfreezedItem = () => { + this.setState({ + highlight: false, + isOpIconShow: false + }); + this.props.onUnfreezedItem(); + } + onDeleteRepo = () => { const repo = this.props.repo; seafileAPI.sysAdminDeleteTrashRepo(repo.id).then((res) => { @@ -119,18 +161,6 @@ class Item extends Component { }); } - handleMouseOver = () => { - this.setState({ - isOpIconShown: true - }); - } - - handleMouseOut = () => { - this.setState({ - isOpIconShown: false - }); - } - toggleDeleteRepoDialog = (e) => { if (e) { e.preventDefault(); @@ -145,6 +175,35 @@ class Item extends Component { this.setState({isRestoreRepoDialogOpen: !this.state.isRestoreRepoDialogOpen}); } + translateOperations = (item) => { + let translateResult = ''; + switch(item) { + case 'Restore': + translateResult = gettext('Restore'); + break; + case 'Delete': + translateResult = gettext('Delete'); + break; + default: + break; + } + + return translateResult; + } + + onMenuItemClick = (operation) => { + switch(operation) { + case 'Restore': + this.toggleRestoreRepoDialog(); + break; + case 'Delete': + this.toggleDeleteRepoDialog(); + break; + default: + break; + } + } + render () { const { repo } = this.props; const { isOpIconShown, isDeleteRepoDialogOpen, isRestoreRepoDialogOpen } = this.state; @@ -165,10 +224,13 @@ class Item extends Component { {moment(repo.delete_time).fromNow()} {isOpIconShown && ( - - - - + )}