merge conficts
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 10 Jul 2018 10:40:40 +0000 (12:40 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 10 Jul 2018 10:40:40 +0000 (12:40 +0200)
Feature #13694

Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>

1  2 
src/views-components/create-project-dialog/create-project-dialog.tsx
src/views-components/dialog-create/dialog-project-create.tsx
src/views/project-panel/project-panel.tsx

index 0000000000000000000000000000000000000000,d97eebcd1c02d701c4893c6cfc863e94f494ec53..c7a7852d41d0e5080d9ac418c1a031d586dad5be
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,21 +1,21 @@@
 -import DialogProjectCreate from "../../components/dialog-create/dialog-project-create";
+ // Copyright (C) The Arvados Authors. All rights reserved.
+ //
+ // SPDX-License-Identifier: AGPL-3.0
+ import { connect } from "react-redux";
+ import { Dispatch } from "../../../node_modules/redux";
+ import { RootState } from "../../store/store";
++import DialogProjectCreate from "../dialog-create/dialog-project-create";
+ import actions from "../../store/project/project-action";
+ const mapStateToProps = (state: RootState) => ({
+     open: state.projects.creator.opened
+ });
+ const mapDispatchToProps = (dispatch: Dispatch) => ({
+     handleClose: () => {
+         dispatch(actions.CLOSE_PROJECT_CREATOR());
+     }
+ });
+ export default connect(mapStateToProps, mapDispatchToProps)(DialogProjectCreate);
index 4cdf7468248e60e324b0a3e425dc9630156448ce,0000000000000000000000000000000000000000..475f83714d53db86307fde45656d0ed5f41c28dd
mode 100644,000000..100644
--- /dev/null
@@@ -1,135 -1,0 +1,132 @@@
-     isNameValid: true,
 +// 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';
 +
 +interface ProjectCreateProps {
 +  open: boolean;
 +  handleClose: () => void;
 +}
 +
 +interface DialogState {
 +  name: string;
 +  description: string;
 +  isNameValid: boolean;
 +  isDescriptionValid: boolean;
 +}
 +
 +class DialogProjectCreate extends React.Component<ProjectCreateProps & WithStyles<CssRules>> {
 +  state: DialogState = {
 +    name: '',
 +    description: '',
-           <DialogActions className={classes.dialogActions}>
++    isNameValid: false,
 +    isDescriptionValid: true
 +  };
 +
 +  render() {
 +    const { name, description } = this.state;
 +    const { classes, open, handleClose } = this.props;
 +
 +    return (
 +      <Dialog
 +        open={open}
 +        onClose={handleClose}>
 +        <div className={classes.dialog}>
 +          <DialogTitle id="form-dialog-title" className={classes.dialogTitle}>Create a project</DialogTitle>
 +          <DialogContent className={classes.dialogContent}>
 +            <Validator
 +              value={name}
 +              onChange={e => this.isNameValid(e)}
 +              isRequired={true}
 +              render={hasError =>
 +                <TextField
 +                  margin="dense"
 +                  className={classes.textField}
 +                  id="name"
 +                  onChange={e => this.handleProjectName(e)}
 +                  label="Project name"
 +                  error={hasError}
 +                  fullWidth />} />
 +            <Validator
 +              value={description}
 +              onChange={e => this.isDescriptionValid(e)}
 +              isRequired={false}
 +              render={hasError =>
 +                <TextField
 +                  margin="dense"
 +                  className={classes.textField}
 +                  id="description"
 +                  onChange={e => this.handleDescriptionValue(e)}
 +                  label="Description - optional"
 +                  error={hasError}
 +                  fullWidth />} />
 +          </DialogContent>
- type CssRules = "button" | "lastButton" | "dialogContent" | "textField" | "dialog" | "dialogTitle" | "dialogActions";
++          <DialogActions>
 +            <Button onClick={handleClose} className={classes.button} color="primary">CANCEL</Button>
 +            <Button onClick={handleClose} className={classes.lastButton} color="primary" disabled={!this.state.isNameValid || (!this.state.isDescriptionValid && description.length > 0)} variant="raised">CREATE A PROJECT</Button>
 +          </DialogActions>
 +        </div>
 +      </Dialog>
 +    );
 +  }
 +
 +  handleProjectName(e: any) {
 +    this.setState({
 +      name: e.target.value,
 +    });
 +  }
 +
 +  handleDescriptionValue(e: any) {
 +    this.setState({
 +      description: e.target.value,
 +    });
 +  }
 +
 +  isNameValid(value: boolean | string) {
 +    this.setState({
 +      isNameValid: value,
 +    });
 +  }
 +
 +  isDescriptionValid(value: boolean | string) {
 +    this.setState({
 +      isDescriptionValid: value,
 +    });
 +  }
 +}
 +
-   dialogActions: {
-     marginBottom: "5px"
-   },
++type CssRules = "button" | "lastButton" | "dialogContent" | "textField" | "dialog" | "dialogTitle";
 +
 +const styles: StyleRulesCallback<CssRules> = 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"
 +  }
 +});
 +
 +export default withStyles(styles)(DialogProjectCreate);