itizawa 6 лет назад
Родитель
Сommit
f6fcb0c9ae

+ 6 - 24
src/client/js/components/Admin/Users/InviteUserControl.jsx

@@ -4,39 +4,20 @@ import { withTranslation } from 'react-i18next';
 
 
 import { createSubscribedElement } from '../../UnstatedUtils';
 import { createSubscribedElement } from '../../UnstatedUtils';
 import AppContainer from '../../../services/AppContainer';
 import AppContainer from '../../../services/AppContainer';
+import UsersContainer from '../../../services/UsersContainer';
 import UserInviteModal from './UserInviteModal';
 import UserInviteModal from './UserInviteModal';
 
 
 class InviteUserControl extends React.Component {
 class InviteUserControl extends React.Component {
 
 
-  constructor(props) {
-    super(props);
-
-    this.state = {
-      isUserInviteModalShown: false,
-    };
-
-    this.toggleUserInviteModal = this.toggleUserInviteModal.bind(this);
-  }
-
-  /**
-   * user招待モーダルを開閉する
-   */
-  toggleUserInviteModal() {
-    this.setState({ isUserInviteModalShown: !this.state.isUserInviteModalShown });
-  }
-
   render() {
   render() {
-    const { t } = this.props;
+    const { t, usersContainer } = this.props;
 
 
     return (
     return (
       <Fragment>
       <Fragment>
-        <button type="button" className="btn btn-default" onClick={this.toggleUserInviteModal}>
+        <button type="button" className="btn btn-default" onClick={usersContainer.toggleUserInviteModal}>
           { t('user_management.invite_users') }
           { t('user_management.invite_users') }
         </button>
         </button>
-        <UserInviteModal
-          show={this.state.isUserInviteModalShown}
-          onToggleModal={this.toggleUserInviteModal}
-        />
+        <UserInviteModal />
       </Fragment>
       </Fragment>
     );
     );
   }
   }
@@ -44,12 +25,13 @@ class InviteUserControl extends React.Component {
 }
 }
 
 
 const InviteUserControlWrapper = (props) => {
 const InviteUserControlWrapper = (props) => {
-  return createSubscribedElement(InviteUserControl, props, [AppContainer]);
+  return createSubscribedElement(InviteUserControl, props, [AppContainer, UsersContainer]);
 };
 };
 
 
 InviteUserControl.propTypes = {
 InviteUserControl.propTypes = {
   t: PropTypes.func.isRequired, // i18next
   t: PropTypes.func.isRequired, // i18next
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
+  usersContainer: PropTypes.instanceOf(UsersContainer).isRequired,
 };
 };
 
 
 export default withTranslation()(InviteUserControlWrapper);
 export default withTranslation()(InviteUserControlWrapper);

+ 6 - 7
src/client/js/components/Admin/Users/UserInviteModal.jsx

@@ -11,6 +11,7 @@ import { toastSuccess, toastError } from '../../../util/apiNotification';
 
 
 import { createSubscribedElement } from '../../UnstatedUtils';
 import { createSubscribedElement } from '../../UnstatedUtils';
 import AppContainer from '../../../services/AppContainer';
 import AppContainer from '../../../services/AppContainer';
+import UsersContainer from '../../../services/UsersContainer';
 
 
 class UserInviteModal extends React.Component {
 class UserInviteModal extends React.Component {
 
 
@@ -30,7 +31,7 @@ class UserInviteModal extends React.Component {
   }
   }
 
 
   onToggleModal() {
   onToggleModal() {
-    this.props.onToggleModal();
+    this.props.usersContainer.toggleUserInviteModal();
     this.setState({ invitedEmailList: null });
     this.setState({ invitedEmailList: null });
   }
   }
 
 
@@ -185,11 +186,11 @@ class UserInviteModal extends React.Component {
   }
   }
 
 
   render() {
   render() {
-    const { t } = this.props;
+    const { t, usersContainer } = this.props;
     const { invitedEmailList } = this.state;
     const { invitedEmailList } = this.state;
 
 
     return (
     return (
-      <Modal show={this.props.show} onHide={this.onToggleModal}>
+      <Modal show={usersContainer.state.isUserInviteModalShown} onHide={this.onToggleModal}>
         <Modal.Header className="modal-header" closeButton>
         <Modal.Header className="modal-header" closeButton>
           <Modal.Title>
           <Modal.Title>
             { t('user_management.invite_users') }
             { t('user_management.invite_users') }
@@ -213,16 +214,14 @@ class UserInviteModal extends React.Component {
  * Wrapper component for using unstated
  * Wrapper component for using unstated
  */
  */
 const UserInviteModalWrapper = (props) => {
 const UserInviteModalWrapper = (props) => {
-  return createSubscribedElement(UserInviteModal, props, [AppContainer]);
+  return createSubscribedElement(UserInviteModal, props, [AppContainer, UsersContainer]);
 };
 };
 
 
 
 
 UserInviteModal.propTypes = {
 UserInviteModal.propTypes = {
   t: PropTypes.func.isRequired, // i18next
   t: PropTypes.func.isRequired, // i18next
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
-
-  show: PropTypes.bool.isRequired,
-  onToggleModal: PropTypes.func.isRequired,
+  usersContainer: PropTypes.instanceOf(UsersContainer).isRequired,
 };
 };
 
 
 export default withTranslation()(UserInviteModalWrapper);
 export default withTranslation()(UserInviteModalWrapper);

+ 9 - 0
src/client/js/services/UsersContainer.js

@@ -19,11 +19,13 @@ export default class UsersContainer extends Container {
     this.state = {
     this.state = {
       users: JSON.parse(document.getElementById('admin-user-page').getAttribute('users')) || [],
       users: JSON.parse(document.getElementById('admin-user-page').getAttribute('users')) || [],
       isPasswordResetModalShown: false,
       isPasswordResetModalShown: false,
+      isUserInviteModalShown: false,
       userForPasswordResetModal: null,
       userForPasswordResetModal: null,
     };
     };
 
 
     this.showPasswordResetModal = this.showPasswordResetModal.bind(this);
     this.showPasswordResetModal = this.showPasswordResetModal.bind(this);
     this.hidePasswordResetModal = this.hidePasswordResetModal.bind(this);
     this.hidePasswordResetModal = this.hidePasswordResetModal.bind(this);
+    this.toggleUserInviteModal = this.toggleUserInviteModal.bind(this);
   }
   }
 
 
   /**
   /**
@@ -48,4 +50,11 @@ export default class UsersContainer extends Container {
     this.setState({ isPasswordResetModalShown: false });
     this.setState({ isPasswordResetModalShown: false });
   }
   }
 
 
+  /**
+   * user招待モーダルを開閉する TODO i18n
+   */
+  toggleUserInviteModal() {
+    this.setState({ isUserInviteModalShown: !this.state.isUserInviteModalShown });
+  }
+
 }
 }