PasswordResetRequestForm.jsx 1.9 KB

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