X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/ba1958858cbb152de49946cf7c1c8ce923eb628a..7df4149100f41cc8d4a5438630ba95a1d72409a1:/src/views-components/dialog-create/dialog-project-create.tsx?ds=sidebyside diff --git a/src/views-components/dialog-create/dialog-project-create.tsx b/src/views-components/dialog-create/dialog-project-create.tsx index 475f8371..aefb8159 100644 --- a/src/views-components/dialog-create/dialog-project-create.tsx +++ b/src/views-components/dialog-create/dialog-project-create.tsx @@ -10,123 +10,133 @@ 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'; +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; + open: boolean; + handleClose: () => void; + onSubmit: (data: { name: string, description: string }) => void; } interface DialogState { - name: string; - description: string; - isNameValid: boolean; - isDescriptionValid: boolean; + name: string; + description: string; + isNameValid: boolean; + isDescriptionValid: boolean; } -class DialogProjectCreate extends React.Component> { - state: DialogState = { - name: '', - description: '', - isNameValid: false, - isDescriptionValid: true - }; +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; + 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 />} /> - - - - - -
-
- ); - } + 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/>}/> + + + + + +
+
+ ); + } - handleProjectName(e: any) { - this.setState({ - name: e.target.value, - }); - } + handleSubmit = () => { + this.props.onSubmit({ + name: this.state.name, + description: this.state.description + }); + } - handleDescriptionValue(e: any) { - this.setState({ - description: e.target.value, - }); - } + handleProjectName(e: React.ChangeEvent) { + this.setState({ + name: e.target.value, + }); + } - isNameValid(value: boolean | string) { - this.setState({ - isNameValid: value, - }); - } + handleDescriptionValue(e: React.ChangeEvent) { + this.setState({ + description: e.target.value, + }); + } - isDescriptionValid(value: boolean | string) { - this.setState({ - isDescriptionValid: value, - }); - } -} - -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" - } -}); + isNameValid(value: boolean | string) { + this.setState({ + isNameValid: value, + }); + } -export default withStyles(styles)(DialogProjectCreate); \ No newline at end of file + isDescriptionValid(value: boolean | string) { + this.setState({ + isDescriptionValid: value, + }); + } + } +);