1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-14 06:11:16 +00:00

[share dialog] share link: improved 'permission' (#4018)

This commit is contained in:
llj
2019-08-27 12:04:03 +08:00
committed by Daniel Pan
parent f53815baf9
commit 7aa426935f

View File

@@ -24,6 +24,12 @@ class GenerateShareLink extends React.Component {
this.isExpireDaysNoLimit = (parseInt(shareLinkExpireDaysMin) === 0 && parseInt(shareLinkExpireDaysMax) === 0 && shareLinkExpireDaysDefault == 0); this.isExpireDaysNoLimit = (parseInt(shareLinkExpireDaysMin) === 0 && parseInt(shareLinkExpireDaysMax) === 0 && shareLinkExpireDaysDefault == 0);
this.defaultExpireDays = this.isExpireDaysNoLimit ? '' : shareLinkExpireDaysDefault; this.defaultExpireDays = this.isExpireDaysNoLimit ? '' : shareLinkExpireDaysDefault;
if (isPro) {
this.editOption = 'edit_download';
this.permissionOptions = ['preview_download', 'preview_only'];
}
this.state = { this.state = {
isValidate: false, isValidate: false,
isShowPasswordInput: false, isShowPasswordInput: false,
@@ -36,14 +42,9 @@ class GenerateShareLink extends React.Component {
sharedLinkInfo: null, sharedLinkInfo: null,
isNoticeMessageShow: false, isNoticeMessageShow: false,
isLoading: true, isLoading: true,
fileInfo: null, currentPermission: isPro ? this.permissionOptions[0] : '',
isSendLinkShown: false isSendLinkShown: false
}; };
this.permissions = {
'can_edit': false,
'can_download': true
};
this.isOfficeFile = Utils.isEditableOfficeFile(this.props.itemPath);
} }
componentDidMount() { componentDidMount() {
@@ -63,10 +64,11 @@ class GenerateShareLink extends React.Component {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage); toaster.danger(errMessage);
}); });
if (this.isOfficeFile) {
if (isPro && Utils.isEditableOfficeFile(path)) {
seafileAPI.getFileInfo(repoID, path).then((res) => { seafileAPI.getFileInfo(repoID, path).then((res) => {
if (res.data) { if (res.data.can_edit) {
this.setState({fileInfo: res.data}); this.permissionOptions.push(this.editOption);
} }
}).catch(error => { }).catch(error => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);
@@ -108,23 +110,8 @@ class GenerateShareLink extends React.Component {
this.setState({passwdnew: passwd}); this.setState({passwdnew: passwd});
} }
setPermission = (permission) => { setPermission = (e) => {
if (permission == 'previewAndDownload') { this.setState({currentPermission: e.target.value});
this.permissions = {
'can_edit': false,
'can_download': true
};
} else if (permission == 'preview') {
this.permissions = {
'can_edit': false,
'can_download': false
};
} else if (permission == 'editOnCloudAndDownload'){
this.permissions = {
'can_edit': true,
'can_download': true
};
}
} }
generateShareLink = () => { generateShareLink = () => {
@@ -133,7 +120,11 @@ class GenerateShareLink extends React.Component {
this.setState({errorInfo: ''}); this.setState({errorInfo: ''});
let { itemPath, repoID } = this.props; let { itemPath, repoID } = this.props;
let { password, isExpireChecked, expireDays } = this.state; let { password, isExpireChecked, expireDays } = this.state;
let permissions = isPro ? JSON.stringify(this.permissions) : ''; let permissions;
if (isPro) {
const permissionDetails = Utils.getShareLinkPermissionObject(this.state.currentPermission).permissionDetails;
permissions = JSON.stringify(permissionDetails);
}
const expireDaysSent = isExpireChecked ? expireDays : ''; const expireDaysSent = isExpireChecked ? expireDays : '';
seafileAPI.createShareLink(repoID, itemPath, password, expireDaysSent, permissions).then((res) => { seafileAPI.createShareLink(repoID, itemPath, password, expireDaysSent, permissions).then((res) => {
let sharedLinkInfo = new ShareLink(res.data); let sharedLinkInfo = new ShareLink(res.data);
@@ -172,10 +163,6 @@ class GenerateShareLink extends React.Component {
sharedLinkInfo: null, sharedLinkInfo: null,
isNoticeMessageShow: false, isNoticeMessageShow: false,
}); });
this.permissions = {
'can_edit': false,
'can_download': true
};
}).catch((error) => { }).catch((error) => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage); toaster.danger(errMessage);
@@ -340,7 +327,6 @@ class GenerateShareLink extends React.Component {
</div> </div>
); );
} else { } else {
let fileInfo = this.state.fileInfo;
return ( return (
<Form className="generate-share-link"> <Form className="generate-share-link">
<FormGroup check> <FormGroup check>
@@ -405,26 +391,19 @@ class GenerateShareLink extends React.Component {
<Fragment> <Fragment>
<FormGroup check> <FormGroup check>
<Label check> <Label check>
<span>{' '}{gettext('Set permission')}</span> <span>{gettext('Set permission')}</span>
</Label> </Label>
</FormGroup> </FormGroup>
<FormGroup check className="permission"> {this.permissionOptions.map((item, index) => {
return (
<FormGroup check className="permission" key={index}>
<Label className="form-check-label"> <Label className="form-check-label">
<Input type="radio" name="radio1" defaultChecked={true} onChange={() => this.setPermission('previewAndDownload')}/>{' '}{gettext('Preview and download')} <Input type="radio" name="permission" value={item} checked={this.state.currentPermission == item} onChange={this.setPermission} className="mr-1" />
{Utils.getShareLinkPermissionObject(item).text}
</Label> </Label>
</FormGroup> </FormGroup>
<FormGroup check className="permission"> );
<Label className="form-check-label"> })}
<Input type="radio" name="radio1" onChange={() => this.setPermission('preview')} />{' '}{gettext('Preview only')}
</Label>
</FormGroup>
{(this.isOfficeFile && fileInfo && fileInfo.can_edit) &&
<FormGroup check className="permission">
<Label className="form-check-label">
<Input type="radio" name="radio1" onChange={() => this.setPermission('editOnCloudAndDownload')} />{' '}{gettext('Edit on cloud and download')}
</Label>
</FormGroup>
}
</Fragment> </Fragment>
)} )}
{this.state.errorInfo && <Alert color="danger" className="mt-2">{gettext(this.state.errorInfo)}</Alert>} {this.state.errorInfo && <Alert color="danger" className="mt-2">{gettext(this.state.errorInfo)}</Alert>}