X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/23962688961f81c0fbdb20870096024ded86a0b5..a1310aae9f24935feae463542e9bfde298a5d9e4:/src/views-components/dialog-create/dialog-collection-create.tsx diff --git a/src/views-components/dialog-create/dialog-collection-create.tsx b/src/views-components/dialog-create/dialog-collection-create.tsx index c599b22d..af0e33f1 100644 --- a/src/views-components/dialog-create/dialog-collection-create.tsx +++ b/src/views-components/dialog-create/dialog-collection-create.tsx @@ -5,13 +5,17 @@ import * as React from 'react'; import { reduxForm, Field } from 'redux-form'; import { compose } from 'redux'; -import { TextField } from '../../components/text-field/text-field'; +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/validators'; +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" | "createProgress" | "dialogActions"; +type CssRules = "button" | "lastButton" | "formContainer" | "createProgress" | "dialogActions"; const styles: StyleRulesCallback = theme => ({ button: { @@ -25,9 +29,6 @@ const styles: StyleRulesCallback = theme => ({ display: "flex", flexDirection: "column", }, - textField: { - marginBottom: theme.spacing.unit * 3 - }, createProgress: { position: "absolute", minWidth: "20px", @@ -37,23 +38,37 @@ const styles: StyleRulesCallback = theme => ({ marginBottom: theme.spacing.unit * 3 } }); -interface DialogCollectionCreateProps { + +interface DialogCollectionDataProps { open: boolean; - handleClose: () => void; - onSubmit: (data: { name: string, description: string }) => void; handleSubmit: any; submitting: boolean; invalid: boolean; pristine: boolean; + files: UploadFile[]; +} + +interface DialogCollectionActionProps { + handleClose: () => void; + onSubmit: (data: { name: string, description: string }, files: UploadFile[]) => void; } +type DialogCollectionProps = DialogCollectionDataProps & DialogCollectionActionProps & DispatchProp & WithStyles; + +export const COLLECTION_CREATE_DIALOG = "collectionCreateDialog"; + export const DialogCollectionCreate = compose( - reduxForm({ form: 'collectionCreateDialog' }), + connect((state: RootState) => ({ + files: state.collections.uploader + })), + reduxForm({ form: COLLECTION_CREATE_DIALOG }), withStyles(styles))( - class DialogCollectionCreate extends React.Component> { + class DialogCollectionCreate extends React.Component { render() { - const { classes, open, handleClose, handleSubmit, onSubmit, submitting, invalid, pristine } = this.props; - + 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))}> + onSubmit(data, files))}> Create a collection + this.props.dispatch(collectionUploaderActions.SET_UPLOAD_FILES(files))} /> + disabled={busy}>CANCEL - {submitting && } + {busy && }