SendInvitationEmailButton.jsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { useTranslation } from 'react-i18next';
  4. import AdminUsersContainer from '~/client/services/AdminUsersContainer';
  5. import AppContainer from '~/client/services/AppContainer';
  6. import { toastSuccess, toastError } from '~/client/util/apiNotification';
  7. import { apiv3Put } from '~/client/util/apiv3-client';
  8. import { withUnstatedContainers } from '../../UnstatedUtils';
  9. const SendInvitationEmailButton = (props) => {
  10. const {
  11. appContainer, user, isInvitationEmailSended, onSuccessfullySentInvitationEmail,
  12. } = props;
  13. const { t } = useTranslation();
  14. const textColor = !isInvitationEmailSended ? 'text-danger' : '';
  15. const onClickSendInvitationEmailButton = async() => {
  16. try {
  17. const res = await apiv3Put('/users/send-invitation-email', { id: user._id });
  18. const { failedToSendEmail } = res.data;
  19. if (failedToSendEmail == null) {
  20. const msg = `Email has been sent<br>・${user.email}`;
  21. toastSuccess(msg);
  22. onSuccessfullySentInvitationEmail();
  23. }
  24. else {
  25. const msg = { message: `email: ${failedToSendEmail.email}<br>reason: ${failedToSendEmail.reason}` };
  26. toastError(msg);
  27. }
  28. }
  29. catch (err) {
  30. toastError(err);
  31. }
  32. };
  33. return (
  34. <button className={`dropdown-item ${textColor}`} type="button" onClick={() => { onClickSendInvitationEmailButton() }}>
  35. <i className="icon-fw icon-envelope"></i>
  36. {isInvitationEmailSended && (<>{t('admin:user_management.user_table.resend_invitation_email')}</>)}
  37. {!isInvitationEmailSended && (<>{t('admin:user_management.user_table.send_invitation_email')}</>)}
  38. </button>
  39. );
  40. };
  41. const SendInvitationEmailButtonWrapper = withUnstatedContainers(SendInvitationEmailButton, [AppContainer, AdminUsersContainer]);
  42. SendInvitationEmailButton.propTypes = {
  43. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  44. user: PropTypes.object.isRequired,
  45. isInvitationEmailSended: PropTypes.bool.isRequired,
  46. onSuccessfullySentInvitationEmail: PropTypes.func.isRequired,
  47. };
  48. export default SendInvitationEmailButtonWrapper;