import React from 'react'; import PropTypes from 'prop-types'; import { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Form, FormGroup, Label, Col, FormText } from 'reactstrap'; import { gettext, maxFileName } from '../../utils/constants'; const propTypes = { onCreateRepo: PropTypes.func.isRequired, onCreateToggle: PropTypes.func.isRequired }; class CreateDepartmentRepoDialog extends React.Component { constructor(props) { super(props); this.state = { repoName: '', errMessage: '', }; this.newInput = React.createRef(); } handleChange = (e) => { this.setState({ repoName: e.target.value, }); } handleSubmit = () => { let isValid = this.validateRepoName(); if (isValid) { let repo = this.createRepo(this.state.repoName); this.props.onCreateRepo(repo, 'department'); } } handleKeyPress = (e) => { if (e.key === 'Enter') { this.handleSubmit(); } } toggle = () => { this.props.onCreateToggle(); } componentDidMount = () => { this.newInput.focus(); } validateRepoName = () => { 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 (repoName.length > maxFileName) { errMessage = 'RepoName\'s length is must little than ' + maxFileName; this.setState({errMessage: errMessage}); return false; } return true; } createRepo = (repoName) => { let repo = { repo_name: repoName }; return repo; } render() { return ( {gettext('New Department Library')}
{this.newInput = input;}} value={this.state.repoName} onChange={this.handleChange} maxLength={maxFileName} />
); } } CreateDepartmentRepoDialog.propTypes = propTypes; export default CreateDepartmentRepoDialog;