X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/1c7242e61e9d71c7a37483ec0583dd0256f8ee7e..8b501e5ced1608766db8d16022d34c1ad363fcc8:/src/views-components/dialog-create/dialog-collection-create.tsx?ds=inline diff --git a/src/views-components/dialog-create/dialog-collection-create.tsx b/src/views-components/dialog-create/dialog-collection-create.tsx index d0f793bf..0686904a 100644 --- a/src/views-components/dialog-create/dialog-collection-create.tsx +++ b/src/views-components/dialog-create/dialog-collection-create.tsx @@ -5,16 +5,17 @@ import * as React from 'react'; import { reduxForm, Field } from 'redux-form'; import { compose } from 'redux'; -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 { TextField } from '../../components/text-field/text-field'; +import { Dialog, DialogActions, DialogContent, DialogTitle } from '@material-ui/core/'; import { Button, StyleRulesCallback, WithStyles, withStyles, CircularProgress } from '@material-ui/core'; -import { COLLECTION_NAME_VALIDATION, COLLECTION_DESCRIPTION_VALIDATION } from '../../validators/create-project/create-project-validator'; +import { COLLECTION_NAME_VALIDATION, COLLECTION_DESCRIPTION_VALIDATION } from '../../validators/create-collection/create-collection-validator'; +import { FileUpload } from "../../components/file-upload/file-upload"; +import { connect, DispatchProp } from "react-redux"; +import { RootState } from "../../store/store"; +import { collectionUploaderActions, UploadFile } from "../../store/collections/uploader/collection-uploader-actions"; -type CssRules = "button" | "lastButton" | "formContainer" | "textField" | "dialog" | "dialogTitle" | "createProgress" | "dialogActions"; +type CssRules = "button" | "lastButton" | "formContainer" | "textField" | "createProgress" | "dialogActions"; const styles: StyleRulesCallback = theme => ({ button: { @@ -27,17 +28,9 @@ const styles: StyleRulesCallback = theme => ({ formContainer: { display: "flex", flexDirection: "column", - marginTop: "20px", - }, - dialogTitle: { - paddingBottom: "0" }, textField: { - marginTop: "32px", - }, - dialog: { - minWidth: "600px", - minHeight: "320px" + marginBottom: theme.spacing.unit * 3 }, createProgress: { position: "absolute", @@ -45,85 +38,76 @@ const styles: StyleRulesCallback = theme => ({ right: "110px" }, dialogActions: { - marginBottom: "24px" + marginBottom: theme.spacing.unit * 3 } }); + interface DialogCollectionCreateProps { open: boolean; handleClose: () => void; - onSubmit: (data: { name: string, description: string }) => void; + onSubmit: (data: { name: string, description: string }, files: UploadFile[]) => void; handleSubmit: any; submitting: boolean; invalid: boolean; pristine: boolean; -} - -interface TextFieldProps { - label: string; - floatinglabeltext: string; - className?: string; - input?: string; - meta?: any; + files: UploadFile[]; } export const DialogCollectionCreate = compose( + connect((state: RootState) => ({ + files: state.collections.uploader + })), reduxForm({ form: 'collectionCreateDialog' }), withStyles(styles))( - class DialogCollectionCreate extends React.Component> { - render() { - const { classes, open, handleClose, handleSubmit, onSubmit, submitting, invalid, pristine } = this.props; - - return ( - -
-
onSubmit(data))}> - Create a collection + class DialogCollectionCreate extends React.Component> { + render() { + const { classes, open, handleClose, handleSubmit, onSubmit, submitting, invalid, pristine, files } = this.props; + const busy = submitting || files.reduce( + (prev, curr) => prev + (curr.loaded > 0 && curr.loaded < curr.total ? 1 : 0), 0 + ) > 0; + return ( + + onSubmit(data, files))}> + Create a collection + disabled={submitting} + component={TextField} + validate={COLLECTION_NAME_VALIDATION} + className={classes.textField} + label="Collection Name" /> + disabled={submitting} + component={TextField} + validate={COLLECTION_DESCRIPTION_VALIDATION} + className={classes.textField} + label="Description - optional" /> + this.props.dispatch(collectionUploaderActions.SET_UPLOAD_FILES(files))} /> + disabled={busy}>CANCEL - {submitting && } + + {busy && } -
-
- ); + + ); + } } - - renderTextField = ({ input, label, meta: { touched, error }, ...custom }: TextFieldProps) => ( - - ) - } -); + );