PasswordResetRequestForm.jsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import React, { useState } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { toastSuccess, toastError } from '~/client/util/apiNotification';
  5. import AppContainer from '~/client/services/AppContainer';
  6. import { withUnstatedContainers } from './UnstatedUtils';
  7. const PasswordResetRequestForm = (props) => {
  8. const { t, appContainer } = props;
  9. const [email, setEmail] = useState('');
  10. const changeEmail = (inputValue) => {
  11. setEmail(inputValue);
  12. };
  13. const sendPasswordResetRequestMail = async(e) => {
  14. e.preventDefault();
  15. if (email === '') {
  16. toastError('err', t('forgot_password.email_is_required'));
  17. return;
  18. }
  19. try {
  20. await appContainer.apiv3Post('/forgot-password', { email });
  21. toastSuccess(t('forgot_password.success_to_send_email'));
  22. }
  23. catch (err) {
  24. toastError(err);
  25. }
  26. };
  27. return (
  28. <form onSubmit={sendPasswordResetRequestMail}>
  29. <div className="form-group">
  30. <div className="input-group">
  31. <input name="email" placeholder="E-mail Address" className="form-control" type="email" onChange={e => changeEmail(e.target.value)} />
  32. </div>
  33. </div>
  34. <div className="form-group">
  35. <button
  36. className="btn btn-lg btn-primary btn-block"
  37. type="submit"
  38. >
  39. {t('forgot_password.send')}
  40. </button>
  41. </div>
  42. <a href="/login">
  43. <i className="icon-login mr-1"></i>{t('forgot_password.return_to_login')}
  44. </a>
  45. </form>
  46. );
  47. };
  48. /**
  49. * Wrapper component for using unstated
  50. */
  51. const PasswordResetRequestFormWrapper = withUnstatedContainers(PasswordResetRequestForm, [AppContainer]);
  52. PasswordResetRequestForm.propTypes = {
  53. t: PropTypes.func.isRequired, // i18next
  54. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  55. };
  56. export default withTranslation()(PasswordResetRequestFormWrapper);