From 344eca259a08bedf7fe39e933484f7eca6030a0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E9=A1=BA=E5=BC=BA?= Date: Wed, 27 Feb 2019 13:53:36 +0800 Subject: [PATCH] Dir mode optimized (#2992) * optimized isRepoOwner&isAdmin * optimized isAdmin * optimized encrypted porps * optimized showShareBtn judgement * repair share bug * update showShareBtn logic * delete unnecessary comment --- .../src/components/dialog/share-dialog.js | 6 +- .../src/components/dialog/share-to-group.js | 8 ++- .../src/components/dialog/share-to-user.js | 8 ++- .../dir-view-mode/dir-column-view.js | 10 +--- .../components/dir-view-mode/dir-list-view.js | 6 -- .../dirent-list-view/dirent-list-item.js | 3 +- .../dirent-list-view/dirent-list-view.js | 20 ++++--- .../toolbar/dir-operation-toolbar.js | 4 +- frontend/src/models/repo-info.js | 4 ++ .../lib-content-view/lib-content-container.js | 14 +---- .../lib-content-view/lib-content-toolbar.js | 2 - .../lib-content-view/lib-content-view.js | 57 ++++++++----------- 12 files changed, 61 insertions(+), 81 deletions(-) diff --git a/frontend/src/components/dialog/share-dialog.js b/frontend/src/components/dialog/share-dialog.js index 6c4e286962..bf3e3b2d32 100644 --- a/frontend/src/components/dialog/share-dialog.js +++ b/frontend/src/components/dialog/share-dialog.js @@ -54,7 +54,7 @@ class ShareDialog extends React.Component { const {repoEncrypted, userPerm, enableDirPrivateShare} = this.props; const enableShareLink = !repoEncrypted && canGenerateShareLink; const enableUploadLink = !repoEncrypted && canGenerateUploadLink && userPerm == 'rw'; - + return (
@@ -112,10 +112,10 @@ class ShareDialog extends React.Component { {enableDirPrivateShare && - + - + } diff --git a/frontend/src/components/dialog/share-to-group.js b/frontend/src/components/dialog/share-to-group.js index 3915e95b2f..683f5cba83 100644 --- a/frontend/src/components/dialog/share-to-group.js +++ b/frontend/src/components/dialog/share-to-group.js @@ -86,6 +86,7 @@ class GroupList extends React.Component { const propTypes = { isGroupOwnedRepo: PropTypes.bool, itemPath: PropTypes.string.isRequired, + itemType: PropTypes.string.isRequired, repoID: PropTypes.string.isRequired }; @@ -106,7 +107,12 @@ class ShareToGroup extends React.Component { sharedItems: [] }; this.options = []; - this.permissions = ['rw', 'r', 'cloud-edit', 'preview']; + this.permissions = [] + if (this.props.itemType === 'library') { + this.permissions = ['rw', 'r', 'admin', 'cloud-edit', 'preview']; + } else if (this.props.itemType === 'dir') { + this.permissions = ['rw', 'r', 'cloud-edit', 'preview']; + } if (this.props.isGroupOwnedRepo || !isPro) { this.permissions = ['rw', 'r']; } diff --git a/frontend/src/components/dialog/share-to-user.js b/frontend/src/components/dialog/share-to-user.js index acd3b03373..7960f5572c 100644 --- a/frontend/src/components/dialog/share-to-user.js +++ b/frontend/src/components/dialog/share-to-user.js @@ -86,6 +86,7 @@ class UserList extends React.Component { const propTypes = { isGroupOwnedRepo: PropTypes.bool, itemPath: PropTypes.string.isRequired, + itemType: PropTypes.string.isRequired, repoID: PropTypes.string.isRequired }; @@ -106,7 +107,12 @@ class ShareToUser extends React.Component { sharedItems: [] }; this.options = []; - this.permissions = ['rw', 'r', 'admin', 'cloud-edit', 'preview']; + this.permissions = []; + if (this.props.itemType === 'library') { + this.permissions = ['rw', 'r', 'admin', 'cloud-edit', 'preview']; + } else if (this.props.itemType === 'dir') { + this.permissions = ['rw', 'r', 'cloud-edit', 'preview']; + } if (this.props.isGroupOwnedRepo || !isPro) { this.permissions = ['rw', 'r']; } diff --git a/frontend/src/components/dir-view-mode/dir-column-view.js b/frontend/src/components/dir-view-mode/dir-column-view.js index f1996381db..e9d9ae27f4 100644 --- a/frontend/src/components/dir-view-mode/dir-column-view.js +++ b/frontend/src/components/dir-view-mode/dir-column-view.js @@ -2,7 +2,7 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import DirColumnNav from './dir-column-nav'; import DirColumnFile from './dir-column-file'; -import DirListMode from './dir-list-view'; +import DirListView from './dir-list-view'; import '../../css/lib-content-view.css'; @@ -12,11 +12,8 @@ const propTypes = { // repoinfo currentRepoInfo: PropTypes.object.isRequired, repoPermission: PropTypes.bool.isRequired, - repoEncrypted: PropTypes.bool.isRequired, enableDirPrivateShare: PropTypes.bool.isRequired, userPrem: PropTypes.bool, - isAdmin: PropTypes.bool.isRequired, - isRepoOwner: PropTypes.bool.isRequired, isGroupOwnedRepo: PropTypes.bool.isRequired, // tree isTreeDataLoading: PropTypes.bool.isRequired, @@ -110,13 +107,10 @@ class DirColumnView extends React.Component { onLinkClick={this.props.onLinkClick} /> ) : ( - diff --git a/frontend/src/components/dirent-list-view/dirent-list-view.js b/frontend/src/components/dirent-list-view/dirent-list-view.js index b5dd9d9870..0848dd66d1 100644 --- a/frontend/src/components/dirent-list-view/dirent-list-view.js +++ b/frontend/src/components/dirent-list-view/dirent-list-view.js @@ -1,6 +1,6 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; -import { siteRoot, gettext, thumbnailSizeForOriginal } from '../../utils/constants'; +import { siteRoot, gettext, thumbnailSizeForOriginal, username } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import Loading from '../loading'; import DirentListItem from './dirent-list-item'; @@ -16,8 +16,6 @@ import toaster from '../toast'; const propTypes = { path: PropTypes.string.isRequired, repoID: PropTypes.string.isRequired, - repoEncrypted: PropTypes.bool.isRequired, - isRepoOwner: PropTypes.bool, currentRepoInfo: PropTypes.object, isAllItemSelected: PropTypes.bool.isRequired, isDirentListLoading: PropTypes.bool.isRequired, @@ -52,6 +50,10 @@ class DirentListView extends React.Component { isCreateFileDialogShow: false, fileType: '' }; + + this.isRepoOwner = props.currentRepoInfo.owner_email === username; + this.isAdmin = props.currentRepoInfo.is_admin; + this.repoEncrypted = props.currentRepoInfo.encrypted; } onFreezedItem = () => { @@ -122,7 +124,7 @@ class DirentListView extends React.Component { return Utils.imageCheck(item.name); }); - const useThumbnail = !this.props.repoEncrypted; + const useThumbnail = !this.repoEncrypted; let prepareItem = (item) => { const name = item.name; @@ -260,7 +262,11 @@ class DirentListView extends React.Component { path={this.props.path} repoID={this.props.repoID} currentRepoInfo={this.props.currentRepoInfo} - isRepoOwner={this.props.isRepoOwner} + isAdmin={this.isAdmin} + isRepoOwner={this.isRepoOwner} + repoEncrypted={this.repoEncrypted} + enableDirPrivateShare={this.props.enableDirPrivateShare} + isGroupOwnedRepo={this.props.isGroupOwnedRepo} direntList={this.props.direntList} onItemClick={this.props.onItemClick} onItemRenameToggle={this.onItemRenameToggle} @@ -276,10 +282,6 @@ class DirentListView extends React.Component { onDirentClick={this.props.onDirentClick} onItemDetails={this.onItemDetails} showImagePopup={this.showImagePopup} - repoEncrypted={this.props.repoEncrypted} - enableDirPrivateShare={this.props.enableDirPrivateShare} - isAdmin={this.props.isAdmin} - isGroupOwnedRepo={this.props.isGroupOwnedRepo} /> ); }) diff --git a/frontend/src/components/toolbar/dir-operation-toolbar.js b/frontend/src/components/toolbar/dir-operation-toolbar.js index 2f77a08cef..cd67363f34 100644 --- a/frontend/src/components/toolbar/dir-operation-toolbar.js +++ b/frontend/src/components/toolbar/dir-operation-toolbar.js @@ -14,7 +14,6 @@ const propTypes = { repoEncrypted: PropTypes.bool.isRequired, enableDirPrivateShare: PropTypes.bool.isRequired, userPerm: PropTypes.string.isRequired, - isAdmin: PropTypes.bool.isRequired, isGroupOwnedRepo: PropTypes.bool.isRequired, showShareBtn: PropTypes.bool.isRequired, onAddFile: PropTypes.func.isRequired, @@ -155,7 +154,7 @@ class DirOperationToolbar extends React.Component { render() { let { path, repoName } = this.props; - let itemType = 'dir'; + let itemType = path === '/' ? 'library' : 'dir'; let itemName = path == '/' ? repoName : Utils.getFolderName(path); return ( @@ -217,7 +216,6 @@ class DirOperationToolbar extends React.Component { repoEncrypted={this.props.repoEncrypted} enableDirPrivateShare={this.props.enableDirPrivateShare} userPerm={this.props.userPerm} - isAdmin={this.props.isAdmin} isGroupOwnedRepo={this.props.isGroupOwnedRepo} toggleDialog={this.onShareClick} /> diff --git a/frontend/src/models/repo-info.js b/frontend/src/models/repo-info.js index 8dd0255315..1b20ee247e 100644 --- a/frontend/src/models/repo-info.js +++ b/frontend/src/models/repo-info.js @@ -10,11 +10,15 @@ class RepoInfo { this.owner_name = object.owner_name; this.owner_email = object.owner_email; this.owner_contact_email = object.owner_contact_email; + // is repo shared admin; + // is repo shared admin && is one of current ordinary group's admins; + // is one of current group owned group's admins; this.is_admin = object.is_admin; this.is_virtual = object.is_virtual; this.no_quota = object.no_quota; this.has_been_shared_out = object.has_been_shared_out; this.encrypted = object.encrypted; + this.lib_need_decrypt = object.lib_need_decrypt; } } diff --git a/frontend/src/pages/lib-content-view/lib-content-container.js b/frontend/src/pages/lib-content-view/lib-content-container.js index d437e504f8..d1c3f8ba1b 100644 --- a/frontend/src/pages/lib-content-view/lib-content-container.js +++ b/frontend/src/pages/lib-content-view/lib-content-container.js @@ -15,13 +15,9 @@ const propTypes = { // repoinfo currentRepoInfo: PropTypes.object.isRequired, repoID: PropTypes.string.isRequired, - repoName: PropTypes.string.isRequired, repoPermission: PropTypes.bool.isRequired, - repoEncrypted: PropTypes.bool.isRequired, enableDirPrivateShare: PropTypes.bool.isRequired, userPrem: PropTypes.bool, - isAdmin: PropTypes.bool.isRequired, - isRepoOwner: PropTypes.bool.isRequired, isGroupOwnedRepo: PropTypes.bool.isRequired, // path func onTabNavClick: PropTypes.func.isRequired, @@ -133,10 +129,10 @@ class LibContentContainer extends React.Component {
{ - if (res.data.admins.indexOf(username) != -1) { - this.setState({isDepartmentAdmin: true}); - } - }); - } - let repoID = repoInfo.repo_id; let path = location.slice(location.indexOf(repoID) + repoID.length + 1); // get the string after repoID path = path.slice(path.indexOf('/')); // get current path @@ -127,7 +107,7 @@ class LibContentView extends React.Component { this.setState({path: path}); - if (!res.data.lib_need_decrypt) { + if (!repoInfo.lib_need_decrypt) { this.loadDirData(path); } }).catch(error => { @@ -1192,15 +1172,29 @@ class LibContentView extends React.Component { let showShareBtn = false; let enableDirPrivateShare = false; - const { repoEncrypted, isAdmin, ownerEmail, userPerm, isVirtual, isDepartmentAdmin } = this.state; - let isRepoOwner = ownerEmail === username; + let { currentRepoInfo, repoEncrypted, userPerm } = this.state; + let isAdmin = currentRepoInfo.is_admin; + let isVirtual = currentRepoInfo.is_virtual; + let isRepoOwner = currentRepoInfo.owner_email === username; + if (!repoEncrypted) { - if ((canGenerateShareLink || canGenerateUploadLink || isRepoOwner || isAdmin) && (userPerm == 'rw' || userPerm == 'r')) { - showShareBtn = true; - if (!isVirtual && (isRepoOwner || isAdmin || isDepartmentAdmin)) { - enableDirPrivateShare = true; - } + let showGenerateShareLinkTab = false; + if (canGenerateShareLink && (userPerm == 'rw' || userPerm == 'r')) { + showGenerateShareLinkTab = true; } + let showGenerateUploadLinkTab = false; + if (canGenerateUploadLink && (userPerm == 'rw')) { + showGenerateUploadLinkTab = true; + } + + if (!isVirtual && (isRepoOwner || isAdmin)) { + enableDirPrivateShare = true; + } + + if (showGenerateShareLinkTab || showGenerateUploadLinkTab || enableDirPrivateShare) { + showShareBtn = true; + } + } return ( @@ -1222,7 +1216,6 @@ class LibContentView extends React.Component { direntList={this.state.direntList} repoName={this.state.repoName} repoEncrypted={this.state.repoEncrypted} - isAdmin={this.state.isAdmin} isGroupOwnedRepo={this.state.isGroupOwnedRepo} userPerm={this.state.userPerm} showShareBtn={showShareBtn} @@ -1244,13 +1237,9 @@ class LibContentView extends React.Component { pathExist={this.state.pathExist} currentRepoInfo={this.state.currentRepoInfo} repoID={this.props.repoID} - repoName={this.state.repoName} repoPermission={this.state.repoPermission} - repoEncrypted={this.state.repoEncrypted} enableDirPrivateShare={enableDirPrivateShare} userPerm={userPerm} - isAdmin={isAdmin} - isRepoOwner={isRepoOwner} isGroupOwnedRepo={this.state.isGroupOwnedRepo} onTabNavClick={this.props.onTabNavClick} onMainNavBarClick={this.onMainNavBarClick}