SendInvitationMailButton.jsx 1.8 KB

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