import React from 'react';
import { useTranslation } from 'next-i18next';
import PropTypes from 'prop-types';
import {
Modal, ModalHeader, ModalBody, ModalFooter,
} from 'reactstrap';
import AdminUsersContainer from '~/client/services/AdminUsersContainer';
import { apiv3Put } from '~/client/util/apiv3-client';
import { toastSuccess, toastError } from '~/client/util/toastr';
import { useIsMailerSetup } from '~/stores/context';
class PasswordResetModal extends React.Component {
constructor(props) {
super(props);
this.state = {
temporaryPassword: [],
isPasswordResetDone: false,
sendEmail: false,
};
this.resetPassword = this.resetPassword.bind(this);
this.onClickSendNewPasswordButton = this.onClickSendNewPasswordButton.bind(this);
}
// Reset Password
async resetPassword() {
const { t, userForPasswordResetModal } = this.props;
try {
const res = await apiv3Put('/users/reset-password', { id: userForPasswordResetModal._id });
const { newPassword } = res.data;
this.setState({ temporaryPassword: newPassword, isPasswordResetDone: true });
}
catch (err) {
toastError(err);
}
}
renderButtons() {
const { t, isMailerSetup } = this.props;
return (
<>
>
);
}
renderModalBodyBeforeReset() {
const { t, userForPasswordResetModal } = this.props;
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')}: {userForPasswordResetModal.email}
>
);
}
returnModalBodyAfterReset() {
const { t, userForPasswordResetModal } = this.props;
const { temporaryPassword, showPassword } = this.state;
const maskedPassword = showPassword
? temporaryPassword
: 'ยท'.repeat(temporaryPassword.length);
return (
<>
{t('user_management.reset_password_modal.password_reset_message')}
{t('user_management.reset_password_modal.target_user')}: {userForPasswordResetModal.email}
{t('user_management.reset_password_modal.new_password')}:
{maskedPassword}
>
);
}
returnModalFooterBeforeReset() {
const { t } = this.props;
return (
);
}
returnModalFooterAfterReset() {
const { t, isMailerSetup, userForPasswordResetModal } = this.props;
if (!isMailerSetup) {
return (
<>
{this.renderButtons()}
>
);
}
return (
<>
To:
{userForPasswordResetModal.username}
{userForPasswordResetModal.email}
{this.renderButtons()}
>
);
}
async onClickSendNewPasswordButton() {
const {
userForPasswordResetModal,
} = this.props;
try {
const res = await apiv3Put('/users/reset-password-email', { id: userForPasswordResetModal._id, newPassword: this.state.temporaryPassword });
const { failedToSendEmail } = res.data;
if (failedToSendEmail == null) {
const msg = `Email has been sent ${userForPasswordResetModal.email}`;
toastSuccess(msg);
}
else {
const msg = { message: `email: ${failedToSendEmail.email} reason: ${failedToSendEmail.reason}` };
toastError(msg);
}
}
catch (err) {
toastError(err);
}
}
render() {
const { t } = this.props;
return (
{t('user_management.reset_password') }
{this.state.isPasswordResetDone ? this.returnModalBodyAfterReset() : this.renderModalBodyBeforeReset()}
{this.state.isPasswordResetDone ? this.returnModalFooterAfterReset() : this.returnModalFooterBeforeReset()}
);
}
}
const PasswordResetModalWrapperFC = (props) => {
const { t } = useTranslation('admin');
const { data: isMailerSetup } = useIsMailerSetup();
return ;
};
/**
* Wrapper component for using unstated
*/
PasswordResetModal.propTypes = {
t: PropTypes.func.isRequired, // i18next
isOpen: PropTypes.bool.isRequired,
onClose: PropTypes.func.isRequired,
userForPasswordResetModal: PropTypes.object,
onSuccessfullySentNewPasswordEmail: PropTypes.func.isRequired,
adminUsersContainer: PropTypes.instanceOf(AdminUsersContainer).isRequired,
};
export default PasswordResetModalWrapperFC;