mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-05 00:43:53 +00:00
change permission on share pop up (#4386)
* change permission on share pop up * update * add Utils.getShareLinkPermissionStr
This commit is contained in:
@@ -4,6 +4,7 @@ import moment from 'moment';
|
|||||||
import copy from 'copy-to-clipboard';
|
import copy from 'copy-to-clipboard';
|
||||||
import { Button, Form, FormGroup, Label, Input, InputGroup, InputGroupAddon, Alert } from 'reactstrap';
|
import { Button, Form, FormGroup, Label, Input, InputGroup, InputGroupAddon, Alert } from 'reactstrap';
|
||||||
import { isPro, gettext, shareLinkExpireDaysMin, shareLinkExpireDaysMax, shareLinkExpireDaysDefault, shareLinkPasswordMinLength, canSendShareLinkEmail } from '../../utils/constants';
|
import { isPro, gettext, shareLinkExpireDaysMin, shareLinkExpireDaysMax, shareLinkExpireDaysDefault, shareLinkPasswordMinLength, canSendShareLinkEmail } from '../../utils/constants';
|
||||||
|
import ShareLinkPermissionEditor from '../../components/select-editor/share-link-permission-editor';
|
||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
import { Utils } from '../../utils/utils';
|
import { Utils } from '../../utils/utils';
|
||||||
import ShareLink from '../../models/share-link';
|
import ShareLink from '../../models/share-link';
|
||||||
@@ -26,6 +27,7 @@ class GenerateShareLink extends React.Component {
|
|||||||
this.defaultExpireDays = this.isExpireDaysNoLimit ? '' : shareLinkExpireDaysDefault;
|
this.defaultExpireDays = this.isExpireDaysNoLimit ? '' : shareLinkExpireDaysDefault;
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
|
isOpIconShown: false,
|
||||||
isValidate: false,
|
isValidate: false,
|
||||||
isShowPasswordInput: false,
|
isShowPasswordInput: false,
|
||||||
isPasswordVisible: false,
|
isPasswordVisible: false,
|
||||||
@@ -273,6 +275,27 @@ class GenerateShareLink extends React.Component {
|
|||||||
this.setState({ isSendLinkShown: !this.state.isSendLinkShown });
|
this.setState({ isSendLinkShown: !this.state.isSendLinkShown });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleMouseOver = () => {
|
||||||
|
this.setState({isOpIconShown: true});
|
||||||
|
}
|
||||||
|
|
||||||
|
handleMouseOut = () => {
|
||||||
|
this.setState({isOpIconShown: false});
|
||||||
|
}
|
||||||
|
|
||||||
|
changePerm = (permission) => {
|
||||||
|
const permissionDetails = Utils.getShareLinkPermissionObject(permission).permissionDetails;
|
||||||
|
seafileAPI.updateShareLink(this.state.sharedLinkInfo.token, JSON.stringify(permissionDetails)).then((res) => {
|
||||||
|
let sharedLinkInfo = new ShareLink(res.data);
|
||||||
|
this.setState({sharedLinkInfo: sharedLinkInfo});
|
||||||
|
let message = gettext('Successfully modified permission.');
|
||||||
|
toaster.success(message);
|
||||||
|
}).catch((error) => {
|
||||||
|
let errMessage = Utils.getErrorMsg(error);
|
||||||
|
toaster.danger(errMessage);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
if (this.state.isLoading) {
|
if (this.state.isLoading) {
|
||||||
return <Loading />;
|
return <Loading />;
|
||||||
@@ -283,6 +306,8 @@ class GenerateShareLink extends React.Component {
|
|||||||
|
|
||||||
if (this.state.sharedLinkInfo) {
|
if (this.state.sharedLinkInfo) {
|
||||||
let sharedLinkInfo = this.state.sharedLinkInfo;
|
let sharedLinkInfo = this.state.sharedLinkInfo;
|
||||||
|
let currentPermission = Utils.getShareLinkPermissionStr(sharedLinkInfo.permissions);
|
||||||
|
const { permissionOptions , isOpIconShown } = this.state;
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Form className="mb-4">
|
<Form className="mb-4">
|
||||||
@@ -314,6 +339,22 @@ class GenerateShareLink extends React.Component {
|
|||||||
<dd>{moment(sharedLinkInfo.expire_date).format('YYYY-MM-DD hh:mm:ss')}</dd>
|
<dd>{moment(sharedLinkInfo.expire_date).format('YYYY-MM-DD hh:mm:ss')}</dd>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{(isPro && sharedLinkInfo.permissions) && (
|
||||||
|
<FormGroup className="mb-0">
|
||||||
|
<dt className="text-secondary font-weight-normal">{gettext('Permissions:')}</dt>
|
||||||
|
<dd style={{width:'250px'}} onMouseEnter={this.handleMouseOver} onMouseLeave={this.handleMouseOut}>
|
||||||
|
<ShareLinkPermissionEditor
|
||||||
|
isTextMode={true}
|
||||||
|
isEditIconShow={isOpIconShown && !sharedLinkInfo.is_expired}
|
||||||
|
currentPermission={currentPermission}
|
||||||
|
permissionOptions={permissionOptions}
|
||||||
|
onPermissionChanged={this.changePerm}
|
||||||
|
/>
|
||||||
|
</dd>
|
||||||
|
</FormGroup>
|
||||||
|
)}
|
||||||
|
|
||||||
</Form>
|
</Form>
|
||||||
{(canSendShareLinkEmail && !this.state.isSendLinkShown && !this.state.isNoticeMessageShow) &&
|
{(canSendShareLinkEmail && !this.state.isSendLinkShown && !this.state.isNoticeMessageShow) &&
|
||||||
<Button onClick={this.toggleSendLink} className='mr-2'>{gettext('Send')}</Button>
|
<Button onClick={this.toggleSendLink} className='mr-2'>{gettext('Send')}</Button>
|
||||||
|
@@ -112,27 +112,13 @@ class Item extends Component {
|
|||||||
let itemType = item.is_dir ? (item.path === '/' ? 'library' : 'dir') : 'file';
|
let itemType = item.is_dir ? (item.path === '/' ? 'library' : 'dir') : 'file';
|
||||||
let permission = item.repo_folder_permission;
|
let permission = item.repo_folder_permission;
|
||||||
let permissionOptions = Utils.getShareLinkPermissionList(itemType, permission, item.path, item.can_edit);
|
let permissionOptions = Utils.getShareLinkPermissionList(itemType, permission, item.path, item.can_edit);
|
||||||
let currentPermission = this.getCurrentPermission();
|
let currentPermission = Utils.getShareLinkPermissionStr(this.props.item.permissions);
|
||||||
this.setState({
|
this.setState({
|
||||||
permissionOptions: permissionOptions,
|
permissionOptions: permissionOptions,
|
||||||
currentPermission: currentPermission
|
currentPermission: currentPermission
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getCurrentPermission = () => {
|
|
||||||
const { can_edit, can_download } = this.props.item.permissions;
|
|
||||||
switch (`${can_edit} ${can_download}`) {
|
|
||||||
case 'false true':
|
|
||||||
return 'preview_download';
|
|
||||||
case 'false false':
|
|
||||||
return 'preview_only';
|
|
||||||
case 'true true':
|
|
||||||
return 'edit_download';
|
|
||||||
case 'true false':
|
|
||||||
return 'cloud_edit';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
toggleOpMenu = () => {
|
toggleOpMenu = () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
isOpMenuOpen: !this.state.isOpMenuOpen
|
isOpMenuOpen: !this.state.isOpMenuOpen
|
||||||
|
@@ -155,6 +155,23 @@ export const Utils = {
|
|||||||
return permissionOptions;
|
return permissionOptions;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getShareLinkPermissionStr: function(permissions) {
|
||||||
|
const { can_edit, can_download } = permissions;
|
||||||
|
if (can_edit) {
|
||||||
|
if (can_download) {
|
||||||
|
return 'edit_download';
|
||||||
|
} else {
|
||||||
|
return 'cloud_edit';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (can_download) {
|
||||||
|
return 'preview_download';
|
||||||
|
} else {
|
||||||
|
return 'preview_only';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
isEditableOfficeFile: function(filename) {
|
isEditableOfficeFile: function(filename) {
|
||||||
// no file ext
|
// no file ext
|
||||||
if (filename.lastIndexOf('.') == -1) {
|
if (filename.lastIndexOf('.') == -1) {
|
||||||
|
Reference in New Issue
Block a user