import React from 'react'; import PropTypes from 'prop-types'; import { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Form, FormGroup, Label, FormText } from 'reactstrap'; import { gettext } from '../../utils/constants'; import '../../css/modal.css'; const propTypes = { onCreateRepo: PropTypes.func.isRequired, onCreateToggle: PropTypes.func.isRequired, }; class CreateRepoDialog extends React.Component { constructor(props) { super(props); this.state = { repoName: '', disabled: true, encrypt: false, password1: '', password2: '', errMessage: '', permission: 'rw' }; this.newInput = React.createRef(); } handleRepoNameChange = (e) => { this.setState({repoName: e.target.value}); } handlePassword1Change = (e) => { this.setState({password1: e.target.value}); } handlePassword2Change = (e) => { this.setState({password2: e.target.value}); } handleSubmit = () => { let isValid= this.validateInputParams(); if (isValid) { let repoName = this.state.repoName.trim(); let password = this.state.encrypt ? this.state.password1 : ''; let permission= this.state.permission; let repo = this.createRepo(repoName, password, permission); this.props.onCreateRepo(repo); } } handleKeyPress = (e) => { if (e.key === 'Enter') { this.handleSubmit(); } } toggle = () => { this.props.onCreateToggle(); } componentDidMount() { this.newInput.focus(); } validateInputParams() { let errMessage = ''; let repoName = this.state.repoName.trim(); if (!repoName.length) { errMessage = 'Name is required'; this.setState({errMessage: errMessage}); return false; } if (repoName.indexOf('/') > -1) { errMessage = 'Name should not include \'/\'.'; this.setState({errMessage: errMessage}); return false; } if (this.state.encrypt) { let password1 = this.state.password1.trim(); let password2 = this.state.password2.trim(); if (!password1.length) { errMessage = 'Please enter password'; this.setState({errMessage: errMessage}); return false; } if (!password2.length) { errMessage = 'Please enter the password again'; this.setState({errMessage: errMessage}); return false; } if (password1.length < 8) { errMessage = 'Password is too short'; this.setState({errMessage: errMessage}); return false; } if (password1 !== password2) { errMessage = 'Passwords don\'t match'; this.setState({errMessage: errMessage}); return false; } } return true; } onPermissionChange = (e) => { let permission = e.target.value; this.setState({permission: permission}); } onEncrypted = (e) => { let isChecked = e.target.checked; this.setState({ encrypt: isChecked, disabled: !isChecked }); } createRepo = (repoName, password, permission) => { let libraryType = this.props.libraryType; let encrypt = password ? true : false; let repo = null; if (libraryType === 'mine' || libraryType === 'public') { repo = { id: null, name: repoName, desc: '', encrypted: encrypt, passwd: password, passwd1: password, passwd2: password, mtime: 0, mtime_relative: '', owner: '-', owner_nickname: '-', permission: 'rw', storage_name: '-', }; } if (libraryType === 'group') { repo = { repo_name: repoName, password: password, permission: permission, }; } return repo; } render() { return ( {gettext('New Library')}
{this.newInput = input;}} value={this.state.repoName} onChange={this.handleRepoNameChange} /> {this.props.libraryType === 'group' && ( )} {gettext('Encrypt')}
); } } CreateRepoDialog.propTypes = propTypes; export default CreateRepoDialog;