1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-21 11:27:18 +00:00

Merge branch '7.0'

This commit is contained in:
plt
2019-06-21 16:16:41 +08:00
14 changed files with 170 additions and 87 deletions

View File

@@ -1,11 +1,13 @@
import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import { Modal, ModalHeader, ModalBody, TabContent, TabPane, Nav, NavItem, NavLink } from 'reactstrap';
import { gettext, canGenerateShareLink, canGenerateUploadLink } from '../../utils/constants';
import { gettext, username, canGenerateShareLink, canGenerateUploadLink } from '../../utils/constants';
import ShareToUser from './share-to-user';
import ShareToGroup from './share-to-group';
import GenerateShareLink from './generate-share-link';
import GenerateUploadLink from './generate-upload-link';
import { seafileAPI } from '../../utils/seafile-api';
import Loading from '../loading';
import '../../css/share-link-dialog.css';
const propTypes = {
@@ -24,10 +26,23 @@ class ShareDialog extends React.Component {
constructor(props) {
super(props);
this.state = {
activeTab: this.getInitialActiveTab()
activeTab: this.getInitialActiveTab(),
isRepoJudgemented: false,
isRepoOwner: false,
};
}
componentDidMount() {
let repoID = this.props.repoID;
seafileAPI.getRepoInfo(repoID).then(res => {
let isRepoOwner = res.data.owner_email === username;
this.setState({
isRepoJudgemented: true,
isRepoOwner: isRepoOwner,
});
});
}
getInitialActiveTab = () => {
const {repoEncrypted, userPerm, enableDirPrivateShare} = this.props;
const enableShareLink = !repoEncrypted && canGenerateShareLink;
@@ -49,8 +64,12 @@ class ShareDialog extends React.Component {
}
renderDirContent = () => {
let activeTab = this.state.activeTab;
if (!this.state.isRepoJudgemented) {
return <Loading />;
}
let activeTab = this.state.activeTab;
const {repoEncrypted, userPerm, enableDirPrivateShare} = this.props;
const enableShareLink = !repoEncrypted && canGenerateShareLink;
const enableUploadLink = !repoEncrypted && canGenerateUploadLink && userPerm == 'rw';
@@ -112,10 +131,10 @@ class ShareDialog extends React.Component {
{enableDirPrivateShare &&
<Fragment>
<TabPane tabId="shareToUser">
<ShareToUser itemType={this.props.itemType} 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} isRepoOwner={this.state.isRepoOwner}/>
</TabPane>
<TabPane tabId="shareToGroup">
<ShareToGroup itemType={this.props.itemType} 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} isRepoOwner={this.state.isRepoOwner}/>
</TabPane>
</Fragment>
}

View File

@@ -36,6 +36,7 @@ class GroupItem extends React.Component {
render() {
let item = this.props.item;
let currentPermission = item.is_admin ? 'admin' : item.permission;
return (
<tr onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
<td className='name'>{item.group_info.name}</td>
@@ -43,7 +44,7 @@ class GroupItem extends React.Component {
<SharePermissionEditor
isTextMode={true}
isEditIconShow={this.state.isOperationShow}
currentPermission={item.permission}
currentPermission={currentPermission}
permissions={this.props.permissions}
onPermissionChanged={this.onChangeUserPermission}
/>
@@ -87,7 +88,8 @@ const propTypes = {
isGroupOwnedRepo: PropTypes.bool,
itemPath: PropTypes.string.isRequired,
itemType: PropTypes.string.isRequired,
repoID: PropTypes.string.isRequired
repoID: PropTypes.string.isRequired,
isRepoOwner: PropTypes.bool.isRequired,
};
const NoOptionsMessage = (props) => {
@@ -108,9 +110,10 @@ class ShareToGroup extends React.Component {
};
this.options = [];
this.permissions = []
if (this.props.itemType === 'library') {
this.permissions = ['rw', 'r', 'admin', 'cloud-edit', 'preview'];
} else if (this.props.itemType === 'dir') {
let { itemType, isRepoOwner } = props;
if (itemType === 'library') {
this.permissions = isRepoOwner ? ['rw', 'r', 'admin', 'cloud-edit', 'preview'] : ['rw', 'r', 'cloud-edit', 'preview'];
} else if (itemType === 'dir') {
this.permissions = ['rw', 'r', 'cloud-edit', 'preview'];
}
if (this.props.isGroupOwnedRepo || !isPro) {
@@ -251,6 +254,7 @@ class ShareToGroup extends React.Component {
if (groupID === sharedItemGroupID) {
sharedItem.permission = permission;
}
sharedItem.is_admin = permission === 'admin' ? true : false;
return sharedItem;
});
this.setState({sharedItems: sharedItems});

View File

@@ -88,7 +88,8 @@ const propTypes = {
isGroupOwnedRepo: PropTypes.bool,
itemPath: PropTypes.string.isRequired,
itemType: PropTypes.string.isRequired,
repoID: PropTypes.string.isRequired
repoID: PropTypes.string.isRequired,
isRepoOwner: PropTypes.bool.isRequired,
};
class ShareToUser extends React.Component {
@@ -103,8 +104,9 @@ class ShareToUser extends React.Component {
};
this.options = [];
this.permissions = [];
if (this.props.itemType === 'library') {
this.permissions = ['rw', 'r', 'admin', 'cloud-edit', 'preview'];
let { itemType, isRepoOwner } = props;
if (itemType === 'library') {
this.permissions = isRepoOwner ? ['rw', 'r', 'admin', 'cloud-edit', 'preview'] : ['rw', 'r', 'cloud-edit', 'preview'];
} else if (this.props.itemType === 'dir') {
this.permissions = ['rw', 'r', 'cloud-edit', 'preview'];
}
@@ -319,13 +321,13 @@ class ShareToUser extends React.Component {
deleteShareItem={this.deleteShareItem}
onChangeUserPermission={this.onChangeUserPermission}
/>
{ canInvitePeople &&
<a href={siteRoot + 'invitations/'} className="invite-link-in-popup">
<i className="sf2-icon-invite invite-link-icon-in-popup"></i>
<span className="invite-link-icon-in-popup">{gettext('Invite People')}</span>
</a>
}
</table>
{canInvitePeople &&
<a href={siteRoot + 'invitations/'} className="invite-link-in-popup">
<i className="sf2-icon-invite invite-link-icon-in-popup"></i>
<span className="invite-link-icon-in-popup">{gettext('Invite People')}</span>
</a>
}
</div>
</Fragment>
);