Kaynağa Gözat

create the isInvitationEmailSended state

Shun Miyazawa 4 yıl önce
ebeveyn
işleme
da5834a137

+ 9 - 4
src/client/js/components/Admin/Users/SendInvitationEmailButton.jsx

@@ -7,10 +7,12 @@ import AdminUsersContainer from '../../../services/AdminUsersContainer';
 import { withUnstatedContainers } from '../../UnstatedUtils';
 import { withUnstatedContainers } from '../../UnstatedUtils';
 
 
 const SendInvitationEmailButton = (props) => {
 const SendInvitationEmailButton = (props) => {
-  const { appContainer, user } = props;
+  const {
+    appContainer, user, isInvitationEmailSended, updateIsInvitationEmailSended,
+  } = props;
   const { t } = useTranslation();
   const { t } = useTranslation();
 
 
-  const textColor = !user.isInvitationEmailSended ? 'text-danger' : '';
+  const textColor = !isInvitationEmailSended ? 'text-danger' : '';
 
 
   const onClickSendInvitationEmailButton = async() => {
   const onClickSendInvitationEmailButton = async() => {
     try {
     try {
@@ -19,6 +21,7 @@ const SendInvitationEmailButton = (props) => {
       if (failedToSendEmail == null) {
       if (failedToSendEmail == null) {
         const msg = `Email has been sent<br>・${user.email}`;
         const msg = `Email has been sent<br>・${user.email}`;
         toastSuccess(msg);
         toastSuccess(msg);
+        updateIsInvitationEmailSended();
       }
       }
       else {
       else {
         const msg = { message: `email: ${failedToSendEmail.email}<br>reason: ${failedToSendEmail.reason}` };
         const msg = { message: `email: ${failedToSendEmail.email}<br>reason: ${failedToSendEmail.reason}` };
@@ -33,8 +36,8 @@ const SendInvitationEmailButton = (props) => {
   return (
   return (
     <button className={`dropdown-item ${textColor}`} type="button" onClick={() => { onClickSendInvitationEmailButton() }}>
     <button className={`dropdown-item ${textColor}`} type="button" onClick={() => { onClickSendInvitationEmailButton() }}>
       <i className="icon-fw icon-envelope"></i>
       <i className="icon-fw icon-envelope"></i>
-      {user.isInvitationEmailSended && (<>{t('admin:user_management.user_table.resend_invitation_email')}</>)}
-      {!user.isInvitationEmailSended && (<>{t('admin:user_management.user_table.send_invitation_email')}</>)}
+      {isInvitationEmailSended && (<>{t('admin:user_management.user_table.resend_invitation_email')}</>)}
+      {!isInvitationEmailSended && (<>{t('admin:user_management.user_table.send_invitation_email')}</>)}
     </button>
     </button>
   );
   );
 };
 };
@@ -44,6 +47,8 @@ const SendInvitationEmailButtonWrapper = withUnstatedContainers(SendInvitationEm
 SendInvitationEmailButton.propTypes = {
 SendInvitationEmailButton.propTypes = {
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
   user: PropTypes.object.isRequired,
   user: PropTypes.object.isRequired,
+  isInvitationEmailSended: PropTypes.bool.isRequired,
+  updateIsInvitationEmailSended: PropTypes.func.isRequired,
 };
 };
 
 
 export default SendInvitationEmailButtonWrapper;
 export default SendInvitationEmailButtonWrapper;

+ 16 - 3
src/client/js/components/Admin/Users/UserMenu.jsx

@@ -22,16 +22,21 @@ class UserMenu extends React.Component {
     super(props);
     super(props);
 
 
     this.state = {
     this.state = {
-
+      isInvitationEmailSended: this.props.user.isInvitationEmailSended,
     };
     };
 
 
     this.onPasswordResetClicked = this.onPasswordResetClicked.bind(this);
     this.onPasswordResetClicked = this.onPasswordResetClicked.bind(this);
+    this.updateIsInvitationEmailSended = this.updateIsInvitationEmailSended.bind(this);
   }
   }
 
 
   onPasswordResetClicked() {
   onPasswordResetClicked() {
     this.props.adminUsersContainer.showPasswordResetModal(this.props.user);
     this.props.adminUsersContainer.showPasswordResetModal(this.props.user);
   }
   }
 
 
+  updateIsInvitationEmailSended() {
+    this.setState({ isInvitationEmailSended: true });
+  }
+
   renderEditMenu() {
   renderEditMenu() {
     const { t } = this.props;
     const { t } = this.props;
 
 
@@ -50,6 +55,7 @@ class UserMenu extends React.Component {
 
 
   renderStatusMenu() {
   renderStatusMenu() {
     const { t, user } = this.props;
     const { t, user } = this.props;
+    const { isInvitationEmailSended } = this.state;
 
 
     return (
     return (
       <Fragment>
       <Fragment>
@@ -58,7 +64,13 @@ class UserMenu extends React.Component {
         <li>
         <li>
           {(user.status === 1 || user.status === 3) && <StatusActivateButton user={user} />}
           {(user.status === 1 || user.status === 3) && <StatusActivateButton user={user} />}
           {user.status === 2 && <StatusSuspendedButton user={user} />}
           {user.status === 2 && <StatusSuspendedButton user={user} />}
-          {user.status === 5 && <SendInvitationEmailButton user={user} />}
+          {user.status === 5 && (
+          <SendInvitationEmailButton
+            user={user}
+            isInvitationEmailSended={isInvitationEmailSended}
+            updateIsInvitationEmailSended={this.updateIsInvitationEmailSended}
+          />
+          )}
           {(user.status === 1 || user.status === 3 || user.status === 5) && <UserRemoveButton user={user} />}
           {(user.status === 1 || user.status === 3 || user.status === 5) && <UserRemoveButton user={user} />}
         </li>
         </li>
       </Fragment>
       </Fragment>
@@ -82,12 +94,13 @@ class UserMenu extends React.Component {
 
 
   render() {
   render() {
     const { user } = this.props;
     const { user } = this.props;
+    const { isInvitationEmailSended } = this.state;
 
 
     return (
     return (
       <UncontrolledDropdown id="userMenu" size="sm">
       <UncontrolledDropdown id="userMenu" size="sm">
         <DropdownToggle caret color="secondary" outline>
         <DropdownToggle caret color="secondary" outline>
           <i className="icon-settings" />
           <i className="icon-settings" />
-          {(user.status === 5 && !user.isInvitationEmailSended) && <i className="fa fa-circle text-danger grw-usermenu-notification-icon" />}
+          {(user.status === 5 && !isInvitationEmailSended) && <i className="fa fa-circle text-danger grw-usermenu-notification-icon" />}
         </DropdownToggle>
         </DropdownToggle>
         <DropdownMenu positionFixed>
         <DropdownMenu positionFixed>
           {this.renderEditMenu()}
           {this.renderEditMenu()}