import React from 'react'; import PropTypes from 'prop-types'; import { withTranslation } from 'react-i18next'; import Modal from 'react-bootstrap/es/Modal'; import { toastError } from '../../../util/apiNotification'; import { createSubscribedElement } from '../../UnstatedUtils'; import AppContainer from '../../../services/AppContainer'; import AdminUsersContainer from '../../../services/AdminUsersContainer'; class PasswordResetModal extends React.Component { constructor(props) { super(props); this.state = { temporaryPassword: [], isPasswordResetDone: false, }; this.resetPassword = this.resetPassword.bind(this); } async resetPassword() { const { appContainer, adminUsersContainer } = this.props; const user = adminUsersContainer.state.userForPasswordResetModal; const res = await appContainer.apiPost('/admin/users.resetPassword', { user_id: user._id }); if (res.ok) { this.setState({ temporaryPassword: res.newPassword, isPasswordResetDone: true }); } else { toastError('Failed to reset password'); } } renderModalBodyBeforeReset() { const { t, adminUsersContainer } = this.props; const user = adminUsersContainer.state.userForPasswordResetModal; return (

{t('user_management:reset_password_modal.password_reset_message')}

{t('user_management:reset_password_modal.target_user')}: {user.email}

{t('user_management:reset_password_modal.new_password')}: {this.state.temporaryPassword}

); } returnModalBodyAfterReset() { const { t, adminUsersContainer } = this.props; const user = adminUsersContainer.state.userForPasswordResetModal; return (

{t('user_management:reset_password_modal.password_never_seen')}
{t('user_management:reset_password_modal.send_new_password')}

{t('user_management:reset_password_modal.target_user')}: {user.email}

); } returnModalFooter() { return (
); } render() { const { t, adminUsersContainer } = this.props; return ( {t('user_management:reset_password')} {this.state.isPasswordResetDone ? this.renderModalBodyBeforeReset() : this.returnModalBodyAfterReset()} {this.state.isPasswordResetDone && this.returnModalFooter()} ); } } /** * Wrapper component for using unstated */ const PasswordResetModalWrapper = (props) => { return createSubscribedElement(PasswordResetModal, props, [AppContainer, AdminUsersContainer]); }; PasswordResetModal.propTypes = { t: PropTypes.func.isRequired, // i18next appContainer: PropTypes.instanceOf(AppContainer).isRequired, adminUsersContainer: PropTypes.instanceOf(AdminUsersContainer).isRequired, }; export default withTranslation()(PasswordResetModalWrapper);