diff --git a/frontend/src/components/dialog/generate-share-link.js b/frontend/src/components/dialog/generate-share-link.js index 30338de2da..12865cbd0f 100644 --- a/frontend/src/components/dialog/generate-share-link.js +++ b/frontend/src/components/dialog/generate-share-link.js @@ -14,9 +14,10 @@ class GenerateShareLink extends React.Component { constructor(props) { super(props); this.state = { - passwordVisible: false, - showPasswordInput: false, isValidate: false, + isShowPasswordInput: false, + isPasswordVisible: false, + isExpireChecked: false, password: '', passwdnew: '', expireDays: '', @@ -28,6 +29,7 @@ class GenerateShareLink extends React.Component { 'can_edit': false, 'can_download': true }; + this.isExpireDaysNoLimit = (parseInt(shareLinkExpireDaysMin) === 0 && parseInt(shareLinkExpireDaysMax) === 0); } componentDidMount() { @@ -47,9 +49,9 @@ class GenerateShareLink extends React.Component { }); } - addPassword = () => { + onPasswordInputChecked = () => { this.setState({ - showPasswordInput: !this.state.showPasswordInput, + isShowPasswordInput: !this.state.isShowPasswordInput, password: '', passwdnew: '', errorInfo: '' @@ -58,7 +60,7 @@ class GenerateShareLink extends React.Component { togglePasswordVisible = () => { this.setState({ - passwordVisible: !this.state.passwordVisible + isPasswordVisible: !this.state.isPasswordVisible }); } @@ -66,20 +68,16 @@ class GenerateShareLink extends React.Component { let val = Math.random().toString(36).substr(5); this.setState({ password: val, - passwordnew: val + passwdnew: val }); } inputPassword = (e) => { - this.setState({ - password: e.target.value - }); + this.setState({password: e.target.value}); } inputPasswordNew = (e) => { - this.setState({ - passwordnew: e.target.value - }); + this.setState({passwdnew: e.target.value}); } setPermission = (permission) => { @@ -97,35 +95,13 @@ class GenerateShareLink extends React.Component { } generateShareLink = () => { - let path = this.props.itemPath; - let repoID = this.props.repoID; - if (this.state.showPasswordInput && (this.state.password == '')) { - this.setState({ - errorInfo: gettext('Please enter password') - }); - } - else if (this.state.showPasswordInput && (this.state.showPasswordInput && this.state.password.length < 8)) { - this.setState({ - errorInfo: gettext('Password is too short') - }); - } - else if (this.state.showPasswordInput && (this.state.password !== this.state.passwordnew)) { - this.setState({ - errorInfo: gettext('Passwords don\'t match') - }); - } - else if (this.state.expireDays === '') { - this.setState({ - errorInfo: gettext('Please enter days') - }); - } else if (!this.state.isValidate) { - // errMessage had been setted - return; - } else { + let isValid = this.validateParamsInput(); + if (isValid) { + let { itemPath, repoID } = this.props; let { password, expireDays } = this.state; let permissions = this.permissions; permissions = JSON.stringify(permissions); - seafileAPI.createShareLink(repoID, path, password, expireDays, permissions).then((res) => { + seafileAPI.createShareLink(repoID, itemPath, password, expireDays, permissions).then((res) => { this.setState({ link: res.data.link, token: res.data.token @@ -139,49 +115,100 @@ class GenerateShareLink extends React.Component { this.setState({ link: '', token: '', - showPasswordInput: false, password: '', passwordnew: '', + isShowPasswordInput: false, + expireDays: '', + isExpireChecked: false, }); this.permissions = { 'can_edit': false, 'can_download': true }; }); - } + } - onExpireHandler = (e) => { - let day = e.target.value; + onExpireChecked = (e) => { + this.setState({isExpireChecked: e.target.checked}); + } + + onExpireDaysChanged = (e) => { + this.setState({expireDays: e.target.value}); + } + + validateParamsInput = () => { + let { isShowPasswordInput , password, passwdnew, isExpireChecked, expireDays } = this.state; + // validate password + if (isShowPasswordInput) { + if (password.length === 0) { + this.setState({errorInfo: 'Please enter password'}); + return false; + } + if (password.length < 8) { + this.setState({errorInfo: 'Password is too short'}); + return false; + } + if (password !== passwdnew) { + this.setState({errorInfo: 'Passwords don\'t match'}); + return false; + } + } + + // validate days + // no limit let reg = /^\d+$/; - let flag = reg.test(day); - if (!flag) { - this.setState({ - isValidate: false, - errorInfo: gettext('Please enter a non-negative integer'), - expireDays: day, - }); - return; - } - - day = parseInt(day); + if (this.isExpireDaysNoLimit) { + if (isExpireChecked) { + if (!expireDays) { + this.setState({errorInfo: gettext('Please enter days')}); + return false; + } + let flag = reg.test(expireDays); + if (!flag) { + this.setState({errorInfo: 'Please enter a non-negative integer'}); + return false; + } + this.setState({expireDays: parseInt(expireDays)}); + } + } else { + if (!expireDays) { + this.setState({errorInfo: gettext('Please enter days')}); + return false; + } + let flag = reg.test(expireDays); + if (!flag) { + this.setState({errorInfo: 'Please enter a non-negative integer'}); + return false; + } - if (day < shareLinkExpireDaysMin || day > shareLinkExpireDaysMax) { - let errorMessage = gettext('Please enter a value between day1 and day2'); - errorMessage = errorMessage.replace('day1', shareLinkExpireDaysMin); - errorMessage = errorMessage.replace('day2', shareLinkExpireDaysMax); - this.setState({ - isValidate: false, - errorInfo: errorMessage, - expireDays: day - }); - return; + expireDays = parseInt(expireDays); + let minDays = parseInt(shareLinkExpireDaysMin); + let maxDays = parseInt(shareLinkExpireDaysMax); + + if (minDays !== 0 && maxDays !== maxDays) { + if (expireDays < minDays) { + this.setState({errorInfo: 'Please enter valid days'}); + 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'}); + return false; + } + } + this.setState({expireDays: expireDays}); } - this.setState({ - isValidate: true, - errorInfo: '', - expireDays: day - }); + return true; } render() { @@ -197,35 +224,48 @@ class GenerateShareLink extends React.Component {