UNPKG

stitch-ui

Version:

121 lines (111 loc) 3.27 kB
// TODO proptypes /* eslint-disable react/prop-types */ // TODO get rid of refs /* eslint-disable react/no-string-refs */ import React from "react"; import PropTypes from "prop-types"; import Modal from "react-modal"; import { enterPressedCaller } from "../../util"; import validateAppName from "../validation"; import { Banner, FormRow, FormRowInputGroup, FormRowLabelGroup, Button } from "../../core"; class CreateAppModal extends React.Component { constructor(props, context) { super(props, context); this.createApp = this.createApp.bind(this); this.submit = this.submit.bind(this); } createApp() { this.props .createApp(this.props.groupId, this.refs.newAppName.value) .then(app => this.context.router.history.push( `/groups/${this.props.groupId}/apps/${app._id}` ) ) .catch(() => {}); } submit() { const { setCreateAppError } = this.props; const appErr = validateAppName(this.refs.newAppName.value); if (appErr) { setCreateAppError(appErr); } else { this.createApp(); } } render() { const { open, onClose, createAppError } = this.props; return ( <Modal isOpen={open} onRequestClose={onClose} contentLabel="Create App" className="view-modal-dialog" overlayClassName="view-modal-overlay" > <div className="view-modal-content"> <div className="view-modal-header"> <Button className="view-modal-close" onClick={this.props.onClose}> × </Button> <h2 className="view-modal-title">Create a new App</h2> </div> <div className="view-modal-body"> <div className="clearfix"> <Banner message={createAppError} error onClear={() => { this.setState({ error: null }); }} /> <FormRow last> <FormRowLabelGroup> <label className="form-row-label" htmlFor="namespace"> App Name </label> </FormRowLabelGroup> <FormRowInputGroup> <input type="text" onKeyPress={enterPressedCaller(this.submit)} id="namespace" className="text-input form-row-text-input" placeholder="my-new-app" ref="newAppName" /> </FormRowInputGroup> </FormRow> </div> </div> <footer className="view-modal-footer"> <Button primary onClick={this.submit}> Create </Button> </footer> </div> </Modal> ); } } CreateAppModal.contextTypes = { router: PropTypes.object }; CreateAppModal.propTypes = { createApp: PropTypes.func.isRequired, groupId: PropTypes.string.isRequired, open: PropTypes.bool.isRequired, onClose: PropTypes.func.isRequired, setCreateAppError: PropTypes.func.isRequired, createAppError: PropTypes.string }; CreateAppModal.defaultProps = { createAppError: "" }; export default CreateAppModal;