diff --git a/frontend/src/components/dialog/generate-share-link.js b/frontend/src/components/dialog/generate-share-link.js index b03ef73207..9df04e1c8a 100644 --- a/frontend/src/components/dialog/generate-share-link.js +++ b/frontend/src/components/dialog/generate-share-link.js @@ -4,6 +4,7 @@ import moment from 'moment'; import copy from 'copy-to-clipboard'; import { Button, Form, FormGroup, Label, Input, InputGroup, InputGroupAddon, Alert } from 'reactstrap'; 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 { Utils } from '../../utils/utils'; import ShareLink from '../../models/share-link'; @@ -26,6 +27,7 @@ class GenerateShareLink extends React.Component { this.defaultExpireDays = this.isExpireDaysNoLimit ? '' : shareLinkExpireDaysDefault; this.state = { + isOpIconShown: false, isValidate: false, isShowPasswordInput: false, isPasswordVisible: false, @@ -44,7 +46,7 @@ class GenerateShareLink extends React.Component { } componentDidMount() { - let path = this.props.itemPath; + let path = this.props.itemPath; let repoID = this.props.repoID; seafileAPI.getShareLink(repoID, path).then((res) => { if (res.data.length !== 0) { @@ -156,7 +158,7 @@ class GenerateShareLink extends React.Component { toaster.success(gettext('Share link is copied to the clipboard.')); this.props.closeShareDialog(); } - + onCopyDownloadLink = () => { let downloadLink = this.state.sharedLinkInfo.link + '?dl=1'; copy(downloadLink); @@ -245,14 +247,14 @@ class GenerateShareLink extends React.Component { return false; } } - + if (minDays === 0 && maxDays !== 0 ) { if (expireDays > maxDays) { this.setState({errorInfo: 'Please enter valid days'}); return false; } } - + if (minDays !== 0 && maxDays !== 0) { if (expireDays < minDays || expireDays > maxDays) { this.setState({errorInfo: 'Please enter valid days'}); @@ -273,6 +275,27 @@ class GenerateShareLink extends React.Component { 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() { if (this.state.isLoading) { return ; @@ -283,6 +306,8 @@ class GenerateShareLink extends React.Component { if (this.state.sharedLinkInfo) { let sharedLinkInfo = this.state.sharedLinkInfo; + let currentPermission = Utils.getShareLinkPermissionStr(sharedLinkInfo.permissions); + const { permissionOptions , isOpIconShown } = this.state; return (
@@ -314,6 +339,22 @@ class GenerateShareLink extends React.Component {
{moment(sharedLinkInfo.expire_date).format('YYYY-MM-DD hh:mm:ss')}
)} + + {(isPro && sharedLinkInfo.permissions) && ( + +
{gettext('Permissions:')}
+
+ +
+
+ )} +
{(canSendShareLinkEmail && !this.state.isSendLinkShown && !this.state.isNoticeMessageShow) && @@ -344,7 +385,7 @@ class GenerateShareLink extends React.Component {
{this.state.isShowPasswordInput && @@ -368,7 +409,7 @@ class GenerateShareLink extends React.Component { {' '}{gettext('Add auto expiration')} - {this.state.isExpireChecked && + {this.state.isExpireChecked && )} - {isPro && ( + {isPro && (