SendInvitationEmailButton.jsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import React from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import PropTypes from 'prop-types';
  4. import AdminUsersContainer from '~/client/services/AdminUsersContainer';
  5. import { apiv3Put } from '~/client/util/apiv3-client';
  6. import { toastError, toastSuccess } from '~/client/util/toastr';
  7. import { withUnstatedContainers } from '../../UnstatedUtils';
  8. const SendInvitationEmailButton = (props) => {
  9. const { user, isInvitationEmailSended, onSuccessfullySentInvitationEmail } =
  10. props;
  11. const { t } = useTranslation();
  12. const textColor = !isInvitationEmailSended ? 'text-danger' : '';
  13. const onClickSendInvitationEmailButton = async () => {
  14. try {
  15. const res = await apiv3Put('/users/send-invitation-email', {
  16. id: user._id,
  17. });
  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. } else {
  24. const msg = {
  25. message: `email: ${failedToSendEmail.email}<br>reason: ${failedToSendEmail.reason}`,
  26. };
  27. toastError(msg);
  28. }
  29. } catch (err) {
  30. toastError(err);
  31. }
  32. };
  33. return (
  34. <button
  35. className={`dropdown-item ${textColor}`}
  36. type="button"
  37. onClick={() => {
  38. onClickSendInvitationEmailButton();
  39. }}
  40. >
  41. <span className="material-symbols-outlined me-1">mail</span>
  42. {isInvitationEmailSended && (
  43. <>{t('admin:user_management.user_table.resend_invitation_email')}</>
  44. )}
  45. {!isInvitationEmailSended && (
  46. <>{t('admin:user_management.user_table.send_invitation_email')}</>
  47. )}
  48. </button>
  49. );
  50. };
  51. const SendInvitationEmailButtonWrapper = withUnstatedContainers(
  52. SendInvitationEmailButton,
  53. [AdminUsersContainer],
  54. );
  55. SendInvitationEmailButton.propTypes = {
  56. user: PropTypes.object.isRequired,
  57. isInvitationEmailSended: PropTypes.bool.isRequired,
  58. onSuccessfullySentInvitationEmail: PropTypes.func.isRequired,
  59. };
  60. export default SendInvitationEmailButtonWrapper;