unageanu/jiji2

View on GitHub
sites/src/js/view/components/widgets/confirm-dialog.js

Summary

Maintainability
A
30 mins
Test Coverage
import React        from "react"

import Deferred     from "../../../utils/deferred"

import Dialog from "material-ui/Dialog"
import FlatButton from "material-ui/FlatButton"

export default class ConfirmDialog extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      open: false
    };
  }

  render() {
    return (
      <Dialog
        key="dialog"
        className="confilm-dialog"
        open={this.state.open}
        actions={this.createActions()}
        modal={true}
      >
        <div className="dialog-content">
          <div className="dialog-description">{this.props.text}</div>
        </div>
      </Dialog>
    );
  }

  createActions() {
    return this.props.actions.map((a) => {
      const touchAction = (ev) => {
        if ( this.state.d ) this.state.d.resolve(a.id);
        this.setState({d:null, open:false})
      };
      return <FlatButton
        label={a.text}
        primary={false}
        onTouchTap={touchAction}
      />
    })
  }

  confilm() {
    const d = new Deferred();
    this.setState({d:d,open:true})
    return d;
  }
}
ConfirmDialog.propTypes = {
  text:    React.PropTypes.string.isRequired,
  actions: React.PropTypes.array
};
ConfirmDialog.defaultProps = {
  actions: [
    { text: "いいえ", id:"no"  },
    { text: "はい",   id:"yes" }
  ]
};