diff --git a/frontend/src/components/dialog/generate-share-link.js b/frontend/src/components/dialog/generate-share-link.js index 7fc2bf8f49..c01337f83b 100644 --- a/frontend/src/components/dialog/generate-share-link.js +++ b/frontend/src/components/dialog/generate-share-link.js @@ -1,8 +1,8 @@ -import React, { Fragment } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; import copy from 'copy-to-clipboard'; -import { Button, Form, FormGroup, Label, Input, InputGroup, InputGroupAddon, InputGroupText, Alert, FormText } from 'reactstrap'; +import { Button, Form, FormGroup, Label, Input, InputGroup, InputGroupAddon, Alert } from 'reactstrap'; import { isPro, gettext, shareLinkExpireDaysMin, shareLinkExpireDaysMax, shareLinkExpireDaysDefault, shareLinkForceUsePassword, shareLinkPasswordMinLength, shareLinkPasswordStrengthLevel, canSendShareLinkEmail } from '../../utils/constants'; import ShareLinkPermissionEditor from '../../components/select-editor/share-link-permission-editor'; import { seafileAPI } from '../../utils/seafile-api'; @@ -11,8 +11,8 @@ import ShareLink from '../../models/share-link'; import toaster from '../toast'; import Loading from '../loading'; import SendLink from '../send-link'; -import DateTimePicker from '../date-and-time-picker'; import SharedLink from '../shared-link'; +import SetLinkExpiration from '../set-link-expiration'; const propTypes = { itemPath: PropTypes.string.isRequired, @@ -31,20 +31,6 @@ class GenerateShareLink extends React.Component { this.isExpireDaysNoLimit = (shareLinkExpireDaysMin === 0 && shareLinkExpireDaysMax === 0 && shareLinkExpireDaysDefault == 0); this.defaultExpireDays = this.isExpireDaysNoLimit ? '' : shareLinkExpireDaysDefault; - let expirationLimitTip = ''; - if (shareLinkExpireDaysMin !== 0 && shareLinkExpireDaysMax !== 0) { - expirationLimitTip = gettext('{minDays_placeholder} - {maxDays_placeholder} days') - .replace('{minDays_placeholder}', shareLinkExpireDaysMin) - .replace('{maxDays_placeholder}', shareLinkExpireDaysMax); - } else if (shareLinkExpireDaysMin !== 0 && shareLinkExpireDaysMax === 0) { - expirationLimitTip = gettext('Greater than or equal to {minDays_placeholder} days') - .replace('{minDays_placeholder}', shareLinkExpireDaysMin); - } else if (shareLinkExpireDaysMin === 0 && shareLinkExpireDaysMax !== 0) { - expirationLimitTip = gettext('Less than or equal to {maxDays_placeholder} days') - .replace('{maxDays_placeholder}', shareLinkExpireDaysMax); - } - this.expirationLimitTip = expirationLimitTip; - this.state = { isOpIconShown: false, isValidate: false, @@ -53,7 +39,7 @@ class GenerateShareLink extends React.Component { isExpireChecked: !this.isExpireDaysNoLimit, isExpirationEditIconShow: false, isEditingExpiration: false, - setExp: 'by-days', + expType: 'by-days', expireDays: this.defaultExpireDays, expDate: null, password: '', @@ -118,33 +104,12 @@ class GenerateShareLink extends React.Component { } } - setExp = (e) => { + setExpType = (e) => { this.setState({ - setExp: e.target.value + expType: e.target.value }); } - disabledDate = (current) => { - if (!current) { - // allow empty select - return false; - } - - if (this.isExpireDaysNoLimit) { - return current.isBefore(moment(), 'day'); - } - - const startDay = moment().add(shareLinkExpireDaysMin, 'days'); - const endDay = moment().add(shareLinkExpireDaysMax, 'days'); - if (shareLinkExpireDaysMin !== 0 && shareLinkExpireDaysMax !== 0) { - return current.isBefore(startDay, 'day') || current.isAfter(endDay, 'day'); - } else if (shareLinkExpireDaysMin !== 0 && shareLinkExpireDaysMax === 0) { - return current.isBefore(startDay, 'day'); - } else if (shareLinkExpireDaysMin === 0 && shareLinkExpireDaysMax !== 0) { - return current.isBefore(moment(), 'day') || current.isAfter(endDay, 'day'); - } - } - onExpDateChanged = (value) => { this.setState({ expDate: value @@ -199,7 +164,7 @@ class GenerateShareLink extends React.Component { if (isValid) { this.setState({errorInfo: ''}); let { itemPath, repoID } = this.props; - let { password, isExpireChecked, setExp, expireDays, expDate } = this.state; + let { password, isExpireChecked, expType, expireDays, expDate } = this.state; let permissions; if (isPro) { const permissionDetails = Utils.getShareLinkPermissionObject(this.state.currentPermission).permissionDetails; @@ -207,7 +172,7 @@ class GenerateShareLink extends React.Component { } let expirationTime = ''; if (isExpireChecked) { - if (setExp == 'by-days') { + if (expType == 'by-days') { expirationTime = moment().add(parseInt(expireDays), 'days').format(); } else { expirationTime = expDate.format(); @@ -245,6 +210,7 @@ class GenerateShareLink extends React.Component { passwdnew: '', isShowPasswordInput: shareLinkForceUsePassword ? true : false, expireDays: this.defaultExpireDays, + expDate: null, isExpireChecked: !this.isExpireDaysNoLimit, errorInfo: '', sharedLinkInfo: null, @@ -266,7 +232,7 @@ class GenerateShareLink extends React.Component { } validateParamsInput = () => { - let { isShowPasswordInput, password, passwdnew, isExpireChecked, setExp, expireDays, expDate } = this.state; + let { isShowPasswordInput, password, passwdnew, isExpireChecked, expType, expireDays, expDate } = this.state; // validate password if (isShowPasswordInput) { @@ -289,7 +255,7 @@ class GenerateShareLink extends React.Component { } if (isExpireChecked) { - if (setExp == 'by-date') { + if (expType == 'by-date') { if (!expDate) { this.setState({errorInfo: gettext('Please select an expiration time')}); return false; @@ -356,10 +322,10 @@ class GenerateShareLink extends React.Component { e.preventDefault(); e.nativeEvent.stopImmediatePropagation(); - let { setExp, expireDays, expDate } = this.state; + let { expType, expireDays, expDate } = this.state; let expirationTime = ''; - if (setExp == 'by-days') { + if (expType == 'by-days') { expirationTime = moment().add(parseInt(expireDays), 'days').format(); } else { expirationTime = expDate.format(); @@ -368,8 +334,8 @@ class GenerateShareLink extends React.Component { seafileAPI.updateShareLink(this.state.sharedLinkInfo.token, '', expirationTime).then((res) => { let sharedLinkInfo = new ShareLink(res.data); this.setState({ - sharedLinkInfo: sharedLinkInfo, - isEditingExpiration: false, + sharedLinkInfo: sharedLinkInfo, + isEditingExpiration: false, }); }).catch((error) => { let errMessage = Utils.getErrorMsg(error); @@ -413,7 +379,7 @@ class GenerateShareLink extends React.Component { let passwordLengthTip = gettext('(at least {passwordMinLength} characters and includes {passwordStrengthLevel} of the following: number, upper letter, lower letter and other symbols)'); passwordLengthTip = passwordLengthTip.replace('{passwordMinLength}', shareLinkPasswordMinLength) - .replace('{passwordStrengthLevel}', shareLinkPasswordStrengthLevel); + .replace('{passwordStrengthLevel}', shareLinkPasswordStrengthLevel); const { userPerm } = this.props; const { isCustomPermission } = Utils.getUserPermission(userPerm); @@ -463,7 +429,7 @@ class GenerateShareLink extends React.Component {