UserInviteModal.jsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 { createSubscribedElement } from '../../UnstatedUtils';
  7. import AppContainer from '../../../services/AppContainer';
  8. class UserInviteModal extends React.Component {
  9. constructor(props) {
  10. super(props);
  11. this.state = {
  12. email: '',
  13. sendEmail: false,
  14. };
  15. this.handleSubmit = this.handleSubmit.bind(this);
  16. this.handleInput = this.handleInput.bind(this);
  17. this.handleCheckBox = this.handleCheckBox.bind(this);
  18. }
  19. handleSubmit() {
  20. // TODO GW-165 新規ユーザーを招待するAPIを叩く
  21. console.log('push submit');
  22. }
  23. handleInput(event) {
  24. this.setState({ email: event.target.value });
  25. }
  26. handleCheckBox() {
  27. this.setState({ sendEmail: !this.state.sendEmail });
  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. className="form-control"
  42. placeholder="e.g. user@growi.org"
  43. value={this.state.email}
  44. onChange={this.handleInput}
  45. />
  46. </Modal.Body>
  47. <Modal.Footer className="d-flex">
  48. <label className="mr-3 text-left" style={{ flex: 1 }}>
  49. <input
  50. type="checkbox"
  51. defaultChecked={this.state.sendEmail}
  52. onChange={this.handleCheckBox}
  53. />
  54. <span className="ml-2">{ t('user_management.invite_thru_email') }</span>
  55. </label>
  56. <div>
  57. <Button bsStyle="danger" className="fcbtn btn btn-xs btn-danger btn-outline btn-rounded" onClick={this.props.onToggleModal}>
  58. Cancel
  59. </Button>
  60. <Button
  61. bsStyle="primary"
  62. className="fcbtn btn btn-primary btn-outline btn-rounded btn-1b"
  63. onClick={this.handleSubmit}
  64. >
  65. Done
  66. </Button>
  67. </div>
  68. </Modal.Footer>
  69. </Modal>
  70. );
  71. }
  72. }
  73. /**
  74. * Wrapper component for using unstated
  75. */
  76. const UserInviteModalWrapper = (props) => {
  77. return createSubscribedElement(UserInviteModal, props, [AppContainer]);
  78. };
  79. UserInviteModal.propTypes = {
  80. t: PropTypes.func.isRequired, // i18next
  81. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  82. show: PropTypes.bool.isRequired,
  83. onToggleModal: PropTypes.func.isRequired,
  84. };
  85. export default withTranslation()(UserInviteModalWrapper);