mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-02 07:47:32 +00:00
Dir mode optimized (#2992)
* optimized isRepoOwner&isAdmin * optimized isAdmin * optimized encrypted porps * optimized showShareBtn judgement * repair share bug * update showShareBtn logic * delete unnecessary comment
This commit is contained in:
parent
34d4fe1017
commit
344eca259a
@ -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 (
|
||||
<Fragment>
|
||||
<div className="share-dialog-side">
|
||||
@ -112,10 +112,10 @@ class ShareDialog extends React.Component {
|
||||
{enableDirPrivateShare &&
|
||||
<Fragment>
|
||||
<TabPane tabId="shareToUser">
|
||||
<ShareToUser isGroupOwnedRepo={this.props.isGroupOwnedRepo} itemPath={this.props.itemPath} repoID={this.props.repoID} />
|
||||
<ShareToUser itemType={this.props.itemType} isGroupOwnedRepo={this.props.isGroupOwnedRepo} itemPath={this.props.itemPath} repoID={this.props.repoID} />
|
||||
</TabPane>
|
||||
<TabPane tabId="shareToGroup">
|
||||
<ShareToGroup isGroupOwnedRepo={this.props.isGroupOwnedRepo} itemPath={this.props.itemPath} repoID={this.props.repoID} />
|
||||
<ShareToGroup itemType={this.props.itemType} isGroupOwnedRepo={this.props.isGroupOwnedRepo} itemPath={this.props.itemPath} repoID={this.props.repoID} />
|
||||
</TabPane>
|
||||
</Fragment>
|
||||
}
|
||||
|
@ -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'];
|
||||
}
|
||||
|
@ -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'];
|
||||
}
|
||||
|
@ -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}
|
||||
/>
|
||||
) : (
|
||||
<DirListMode
|
||||
<DirListView
|
||||
path={this.props.path}
|
||||
repoID={this.props.repoID}
|
||||
currentRepoInfo={this.props.currentRepoInfo}
|
||||
repoEncrypted={this.props.repoEncrypted}
|
||||
isRepoOwner={this.props.isRepoOwner}
|
||||
isAdmin={this.props.isAdmin}
|
||||
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
|
||||
enableDirPrivateShare={this.props.enableDirPrivateShare}
|
||||
isRepoInfoBarShow={this.props.isRepoInfoBarShow}
|
||||
|
@ -7,9 +7,6 @@ const propTypes = {
|
||||
path: PropTypes.string.isRequired,
|
||||
repoID: PropTypes.string.isRequired,
|
||||
currentRepoInfo: PropTypes.object.isRequired,
|
||||
repoEncrypted: PropTypes.bool.isRequired,
|
||||
isRepoOwner: PropTypes.bool.isRequired,
|
||||
isAdmin: PropTypes.bool.isRequired,
|
||||
isGroupOwnedRepo: PropTypes.bool.isRequired,
|
||||
enableDirPrivateShare: PropTypes.bool.isRequired,
|
||||
isRepoInfoBarShow: PropTypes.bool.isRequired,
|
||||
@ -57,9 +54,6 @@ class DirListView extends React.Component {
|
||||
path={this.props.path}
|
||||
currentRepoInfo={this.props.currentRepoInfo}
|
||||
repoID={this.props.repoID}
|
||||
repoEncrypted={this.props.repoEncrypted}
|
||||
isRepoOwner={this.props.isRepoOwner}
|
||||
isAdmin={this.props.isAdmin}
|
||||
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
|
||||
enableDirPrivateShare={this.props.enableDirPrivateShare}
|
||||
direntList={this.props.direntList}
|
||||
|
@ -337,7 +337,7 @@ class DirentListItem extends React.Component {
|
||||
|
||||
let iconUrl = Utils.getDirentIcon(dirent);
|
||||
|
||||
const {repoEncrypted, isRepoOwner, isAdmin} = this.props;
|
||||
const { repoEncrypted, isRepoOwner, isAdmin } = this.props;
|
||||
let showShare = false;
|
||||
if (!repoEncrypted &&
|
||||
(dirent.permission == 'rw' || dirent.permission == 'r')) {
|
||||
@ -462,7 +462,6 @@ class DirentListItem extends React.Component {
|
||||
repoID={this.props.repoID}
|
||||
repoEncrypted={false}
|
||||
enableDirPrivateShare={this.props.enableDirPrivateShare}
|
||||
isAdmin={this.props.isAdmin}
|
||||
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
|
||||
toggleDialog={this.closeSharedDialog}
|
||||
/>
|
||||
|
@ -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}
|
||||
/>
|
||||
);
|
||||
})
|
||||
|
@ -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 (
|
||||
<Fragment>
|
||||
@ -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}
|
||||
/>
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
<div className="cur-view-container">
|
||||
<div className="cur-view-path">
|
||||
<CurDirPath
|
||||
pathPrefix={this.props.pathPrefix}
|
||||
currentPath={this.props.path}
|
||||
repoID={repoID}
|
||||
repoName={this.props.currentRepoInfo.repo_name}
|
||||
pathPrefix={this.props.pathPrefix}
|
||||
currentPath={this.props.path}
|
||||
permission={this.props.repoPermission}
|
||||
onTabNavClick={this.props.onTabNavClick}
|
||||
onPathClick={this.onPathClick}
|
||||
@ -151,9 +147,6 @@ class LibContentContainer extends React.Component {
|
||||
path={this.props.path}
|
||||
repoID={repoID}
|
||||
currentRepoInfo={this.props.currentRepoInfo}
|
||||
repoEncrypted={this.props.repoEncrypted}
|
||||
isRepoOwner={this.props.isRepoOwner}
|
||||
isAdmin={this.props.isAdmin}
|
||||
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
|
||||
enableDirPrivateShare={this.props.enableDirPrivateShare}
|
||||
isRepoInfoBarShow={isRepoInfoBarShow}
|
||||
@ -191,9 +184,6 @@ class LibContentContainer extends React.Component {
|
||||
repoID={repoID}
|
||||
currentRepoInfo={this.props.currentRepoInfo}
|
||||
repoPermission={this.props.repoPermission}
|
||||
repoEncrypted={this.props.repoEncrypted}
|
||||
isRepoOwner={this.props.isRepoOwner}
|
||||
isAdmin={this.props.isAdmin}
|
||||
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
|
||||
enableDirPrivateShare={this.props.enableDirPrivateShare}
|
||||
isTreeDataLoading={this.props.isTreeDataLoading}
|
||||
|
@ -28,7 +28,6 @@ const propTypes = {
|
||||
direntList: PropTypes.array.isRequired,
|
||||
repoName: PropTypes.string.isRequired,
|
||||
repoEncrypted: PropTypes.bool.isRequired,
|
||||
isAdmin: PropTypes.bool.isRequired,
|
||||
isGroupOwnedRepo: PropTypes.bool.isRequired,
|
||||
userPerm: PropTypes.string.isRequired,
|
||||
showShareBtn: PropTypes.bool.isRequired,
|
||||
@ -122,7 +121,6 @@ class LibContentToolbar extends React.Component {
|
||||
showShareBtn={this.props.showShareBtn}
|
||||
enableDirPrivateShare={this.props.enableDirPrivateShare}
|
||||
userPerm={this.props.userPerm}
|
||||
isAdmin={this.props.isAdmin}
|
||||
isGroupOwnedRepo={this.props.isGroupOwnedRepo}
|
||||
onAddFile={this.props.onAddFile}
|
||||
onAddFolder={this.props.onAddFolder}
|
||||
|
@ -42,11 +42,7 @@ class LibContentView extends React.Component {
|
||||
repoEncrypted: false,
|
||||
libNeedDecrypt: false,
|
||||
isGroupOwnedRepo: false,
|
||||
isDepartmentAdmin: false,
|
||||
isAdmin: false,
|
||||
ownerEmail: '',
|
||||
userPerm: '',
|
||||
isVirtual: false,
|
||||
selectedDirentList: [],
|
||||
isDraft: false,
|
||||
hasDraft: false,
|
||||
@ -98,27 +94,11 @@ class LibContentView extends React.Component {
|
||||
this.setState({
|
||||
currentRepoInfo: repoInfo,
|
||||
repoName: repoInfo.repo_name,
|
||||
libNeedDecrypt: res.data.lib_need_decrypt,
|
||||
libNeedDecrypt: repoInfo.lib_need_decrypt,
|
||||
repoEncrypted: repoInfo.encrypted,
|
||||
isVirtual: repoInfo.is_virtual,
|
||||
isAdmin: repoInfo.is_admin,
|
||||
ownerEmail: repoInfo.owner_email,
|
||||
repoPermission: repoInfo.permission === 'rw'
|
||||
});
|
||||
|
||||
const ownerEmail = repoInfo.owner_email;
|
||||
if (repoInfo.owner_email.indexOf('@seafile_group') != -1) {
|
||||
|
||||
const groupID = ownerEmail.substring(0, ownerEmail.indexOf('@'));
|
||||
this.setState({isGroupOwnedRepo: true});
|
||||
|
||||
seafileAPI.getGroup(groupID).then(res => {
|
||||
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}
|
||||
|
Loading…
Reference in New Issue
Block a user