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 f9ccdde907..748f5e506a 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 @@ -4,13 +4,14 @@ import moment from 'moment'; import { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap'; import { Link, navigate } from '@gatsbyjs/reach-router'; import { Utils } from '../../utils/utils'; -import { gettext, siteRoot, isPro, username, folderPermEnabled, isSystemStaff, enableResetEncryptedRepoPassword, isEmailConfigured } from '../../utils/constants'; +import { gettext, siteRoot, isPro, username, folderPermEnabled, isSystemStaff, enableResetEncryptedRepoPassword, isEmailConfigured, enableRepoAutoDel } from '../../utils/constants'; import ModalPortal from '../../components/modal-portal'; import ShareDialog from '../../components/dialog/share-dialog'; import LibSubFolderPermissionDialog from '../../components/dialog/lib-sub-folder-permission-dialog'; import DeleteRepoDialog from '../../components/dialog/delete-repo-dialog'; import ChangeRepoPasswordDialog from '../../components/dialog/change-repo-password-dialog'; import ResetEncryptedRepoPasswordDialog from '../../components/dialog/reset-encrypted-repo-password-dialog'; +import LibOldFilesAutoDelDialog from '../../components/dialog/lib-old-files-auto-del-dialog'; import Rename from '../rename'; import { seafileAPI } from '../../utils/seafile-api'; import LibHistorySettingDialog from '../dialog/lib-history-setting-dialog'; @@ -41,6 +42,7 @@ class SharedRepoListItem extends React.Component { highlight: false, isOperationShow: false, isItemMenuShow: false, + isAdvancedMenuShown: false, isShowSharedDialog: false, isRenaming: false, isStarred: this.props.repo.starred, @@ -51,7 +53,8 @@ class SharedRepoListItem extends React.Component { isRepoShareAdminDialogOpen: false, isRepoDeleted: false, isChangePasswordDialogShow: false, - isResetPasswordDialogShow: false + isResetPasswordDialogShow: false, + isOldFilesAutoDelDialogOpen: false, }; this.isDeparementOnwerGroupMember = false; } @@ -116,6 +119,25 @@ class SharedRepoListItem extends React.Component { ); }; + toggleAdvancedMenuShown = (e) => { + this.setState({ isAdvancedMenuShown: true }); + }; + + toggleAdvancedMenu = (e) => { + e.stopPropagation(); + this.setState({ isAdvancedMenuShown: !this.state.isAdvancedMenuShown }, () => { + this.toggleOperationMenu(e); + }); + }; + + onDropDownMouseMove = (e) => { + if (this.state.isAdvancedMenuShown && e.target && e.target.className === 'dropdown-item') { + this.setState({ + isAdvancedMenuShown: false + }); + } + }; + getRepoComputeParams = () => { let repo = this.props.repo; @@ -171,6 +193,9 @@ class SharedRepoListItem extends React.Component { case 'Unwatch File Changes': this.unwatchFileChanges(); break; + case 'Old Files Auto Delete': + this.toggleOldFilesAutoDelDialog(); + break; // no default } }; @@ -279,6 +304,10 @@ class SharedRepoListItem extends React.Component { this.setState({isRepoShareAdminDialogOpen: !this.state.isRepoShareAdminDialogOpen}); }; + toggleOldFilesAutoDelDialog = () => { + this.setState({isOldFilesAutoDelDialogOpen: !this.state.isOldFilesAutoDelDialogOpen}); + }; + onAPITokenToggle = () => { this.setState({isAPITokenDialogShow: !this.state.isAPITokenDialogShow}); }; @@ -327,15 +356,30 @@ class SharedRepoListItem extends React.Component { case 'Unwatch File Changes': translateResult = gettext('Unwatch File Changes'); break; + case 'Old Files Auto Delete': + translateResult = gettext('Auto Deletion Setting'); + break; case 'API Token': translateResult = 'API Token'; // translation is not needed here break; + case 'Advanced': + translateResult = gettext('Advanced'); + break; default: break; } return translateResult; }; + getAdvancedOperations = () => { + const operations = []; + operations.push('API Token'); + if (enableRepoAutoDel) { + operations.push('Old Files Auto Delete'); + } + return operations; + }; + generatorOperations = () => { let { repo, currentGroup } = this.props; //todo this have a bug; use current api is not return admins param; @@ -352,14 +396,22 @@ class SharedRepoListItem extends React.Component { if (folderPermEnabled) { operations.push('Folder Permission'); } - operations.push('Share Admin'); + operations.push('Share Admin', 'Divider'); if (repo.encrypted) { operations.push('Change Password'); } if (repo.encrypted && enableResetEncryptedRepoPassword && isEmailConfigured) { operations.push('Reset Password'); } - operations.push('History Setting', 'API Token', 'Details'); + if (repo.permission == 'r' || repo.permission == 'rw') { + const monitorOp = repo.monitored ? 'Unwatch File Changes' : 'Watch File Changes'; + operations.push(monitorOp); + } + operations.push('Divider', 'History Setting', 'Details'); + if (Utils.isDesktop()) { + operations.push('Advanced'); + } + return operations; } else { operations.push('Unshare'); } @@ -444,6 +496,7 @@ class SharedRepoListItem extends React.Component { const deleteOperation = ; if (this.isDeparementOnwerGroupMember) { + const advancedOperations = this.getAdvancedOperations(); return ( {shareOperation} @@ -459,9 +512,37 @@ class SharedRepoListItem extends React.Component { onClick={this.clickOperationMenuToggle} onKeyDown={this.onDropdownToggleKeyDown} /> - - {operations.map((item, index) => { - return {this.translateMenuItem(item)}; + + {operations.map((item, index)=> { + if (item == 'Divider') { + return ; + } else if (item == 'Advanced') { + return ( + {e.stopPropagation();}} + > + + {this.translateMenuItem(item)} + + + {advancedOperations.map((item, index)=> { + return ({this.translateMenuItem(item)}); + })} + + + ); + } else { + return ({this.translateMenuItem(item)}); + } })} @@ -680,6 +761,15 @@ class SharedRepoListItem extends React.Component { /> )} + {this.state.isOldFilesAutoDelDialogOpen && ( + + + + )} + ); }