// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; import TextField from '@material-ui/core/TextField'; import Dialog from '@material-ui/core/Dialog'; import DialogActions from '@material-ui/core/DialogActions'; import DialogContent from '@material-ui/core/DialogContent'; import DialogTitle from '@material-ui/core/DialogTitle'; import { Button, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; import { Validator } from '../../utils/dialog-validator'; type CssRules = "button" | "lastButton" | "dialogContent" | "textField" | "dialog" | "dialogTitle"; const styles: StyleRulesCallback = theme => ({ button: { marginLeft: theme.spacing.unit }, lastButton: { marginLeft: theme.spacing.unit, marginRight: "20px", }, dialogContent: { marginTop: "20px", }, dialogTitle: { paddingBottom: "0" }, textField: { marginTop: "32px", }, dialog: { minWidth: "600px", minHeight: "320px" } }); interface ProjectCreateProps { open: boolean; handleClose: () => void; onSubmit: (data: { name: string, description: string }) => void; } interface DialogState { name: string; description: string; isNameValid: boolean; isDescriptionValid: boolean; } export const DialogProjectCreate = withStyles(styles)( class extends React.Component> { state: DialogState = { name: '', description: '', isNameValid: false, isDescriptionValid: true }; render() { const { name, description } = this.state; const { classes, open, handleClose } = this.props; return (
Create a project this.isNameValid(e)} isRequired={true} render={hasError => this.handleProjectName(e)} label="Project name" error={hasError} fullWidth/>}/> this.isDescriptionValid(e)} isRequired={false} render={hasError => this.handleDescriptionValue(e)} label="Description - optional" error={hasError} fullWidth/>}/>
); } handleSubmit = () => { this.props.onSubmit({ name: this.state.name, description: this.state.description }); } handleProjectName(e: React.ChangeEvent) { this.setState({ name: e.target.value, }); } handleDescriptionValue(e: React.ChangeEvent) { this.setState({ description: e.target.value, }); } isNameValid(value: boolean | string) { this.setState({ isNameValid: value, }); } isDescriptionValid(value: boolean | string) { this.setState({ isDescriptionValid: value, }); } } );