UserInviteModal.jsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import Button from 'react-bootstrap/es/Button';
  5. import Modal from 'react-bootstrap/es/Modal';
  6. import FormControl from 'react-bootstrap/es/FormControl';
  7. import { createSubscribedElement } from '../../UnstatedUtils';
  8. import AppContainer from '../../../services/AppContainer';
  9. class UserInviteModal extends React.Component {
  10. constructor(props) {
  11. super(props);
  12. this.state = {
  13. email: '',
  14. };
  15. this.handleSubmit = this.handleSubmit.bind(this);
  16. this.handleChange = this.handleChange.bind(this);
  17. }
  18. handleSubmit() {
  19. console.log('push submit');
  20. }
  21. handleChange(event) {
  22. const target = event.target;
  23. const value = target.type === 'checkbox' ? target.checked : target.value;
  24. const name = target.name;
  25. this.setState({
  26. [name]: value,
  27. });
  28. }
  29. render() {
  30. const { t } = this.props;
  31. return (
  32. <Modal show={this.props.show} onHide={this.props.onToggleModal}>
  33. <Modal.Header className="modal-header" closeButton>
  34. <Modal.Title>
  35. { t('user_management.invite_users') }
  36. </Modal.Title>
  37. </Modal.Header>
  38. <Modal.Body>
  39. <label> { t('user_management.emails') }</label>
  40. <input
  41. id="email"
  42. name="email"
  43. className="form-control"
  44. placeholder="e.g. user@growi.org"
  45. value={this.state.email}
  46. onChange={this.handleChange}
  47. />
  48. </Modal.Body>
  49. <Modal.Footer className="d-flex">
  50. <label className="mr-3 text-left" style={{ flex: 1 }}>
  51. {/* TODO Check Boxの値を設定する */}
  52. <input
  53. type="checkbox"
  54. id="comment-form-is-markdown"
  55. name="isMarkdown"
  56. checked={this.state.isMarkdown}
  57. value="1"
  58. onChange={this.updateStateCheckbox}
  59. />
  60. <span className="ml-2">{ t('user_management.invite_thru_email') }</span>
  61. </label>
  62. <div>
  63. <Button bsStyle="danger" className="fcbtn btn btn-xs btn-danger btn-outline btn-rounded" onClick={this.props.onToggleModal}>
  64. Cancel
  65. </Button>
  66. <Button
  67. bsStyle="primary"
  68. className="fcbtn btn btn-primary btn-outline btn-rounded btn-1b"
  69. onClick={this.handleSubmit}
  70. >
  71. Done
  72. </Button>
  73. </div>
  74. </Modal.Footer>
  75. </Modal>
  76. );
  77. }
  78. }
  79. /**
  80. * Wrapper component for using unstated
  81. */
  82. const UserInviteModalWrapper = (props) => {
  83. return createSubscribedElement(UserInviteModal, props, [AppContainer]);
  84. };
  85. UserInviteModal.propTypes = {
  86. t: PropTypes.func.isRequired, // i18next
  87. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  88. show: PropTypes.bool.isRequired,
  89. onToggleModal: PropTypes.func.isRequired,
  90. };
  91. export default withTranslation()(UserInviteModalWrapper);