ConfirmPasswordModal.jsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { CopyToClipboard } from 'react-copy-to-clipboard';
  5. import Modal from 'react-bootstrap/es/Modal';
  6. import Button from 'react-bootstrap/es/Button';
  7. import { toastSuccess } from '../../../util/apiNotification';
  8. import { createSubscribedElement } from '../../UnstatedUtils';
  9. import AppContainer from '../../../services/AppContainer';
  10. class ConfirmPasswordModal extends React.Component {
  11. showToaster() {
  12. toastSuccess('Copied Mail and Password');
  13. }
  14. renderCreatedEmail(userList) {
  15. return (
  16. <ul>
  17. {userList.map((user) => {
  18. const copyText = `Email:${user.email} Password:${user.password} `;
  19. return (
  20. <CopyToClipboard text={copyText} onCopy={this.showToaster}>
  21. <li key={user.email} className="btn">Email: <strong className="mr-3">{user.email}</strong> Password: <strong>{user.password}</strong></li>
  22. </CopyToClipboard>
  23. );
  24. })}
  25. </ul>
  26. );
  27. }
  28. renderExistingEmail(emailList) {
  29. const { t } = this.props;
  30. return (
  31. <>
  32. <p className="text-warning">{ t('user_management.existing_email') }</p>
  33. <ul>
  34. {emailList.map((user) => {
  35. return (
  36. <li key={user}><strong>{user}</strong></li>
  37. );
  38. })}
  39. </ul>
  40. </>
  41. );
  42. }
  43. render() {
  44. const { t } = this.props;
  45. const { createdUserList, existingEmailList } = this.props.invitedEmailList;
  46. return (
  47. <Modal show={this.props.show}>
  48. <Modal.Header className="modal-header">
  49. <Modal.Title>
  50. { t('user_management.invited') }
  51. </Modal.Title>
  52. </Modal.Header>
  53. <Modal.Body>
  54. <p>{ t('user_management.temporary_password') }</p>
  55. <p>{ t('user_management.send_new_password') }</p>
  56. <p className="text-danger">{ t('user_management.send_temporary_password') }</p>
  57. {createdUserList && this.renderCreatedEmail(createdUserList)}
  58. {existingEmailList && this.renderExistingEmail(existingEmailList)}
  59. </Modal.Body>
  60. <Modal.Footer>
  61. <Button
  62. bsStyle="primary"
  63. className="fcbtn btn btn-primary btn-outline btn-rounded btn-1b"
  64. onClick={this.props.onCloseConfirmPasswordModal}
  65. >
  66. Close
  67. </Button>
  68. </Modal.Footer>
  69. </Modal>
  70. );
  71. }
  72. }
  73. /**
  74. * Wrapper component for using unstated
  75. */
  76. const ConfirmPasswordModalWrapper = (props) => {
  77. return createSubscribedElement(ConfirmPasswordModal, props, [AppContainer]);
  78. };
  79. ConfirmPasswordModal.propTypes = {
  80. t: PropTypes.func.isRequired, // i18next
  81. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  82. show: PropTypes.bool.isRequired,
  83. onCloseConfirmPasswordModal: PropTypes.func.isRequired,
  84. invitedEmailList: PropTypes.object,
  85. };
  86. export default withTranslation()(ConfirmPasswordModalWrapper);