Преглед на файлове

Merge pull request #1191 from weseek/invite-multiple-people

Invite multiple people
itizawa преди 6 години
родител
ревизия
21a651c47b
променени са 2 файла, в които са добавени 14 реда и са изтрити 9 реда
  1. 7 6
      src/client/js/components/Admin/Users/UserInviteModal.jsx
  2. 7 3
      src/server/routes/admin.js

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

@@ -16,7 +16,7 @@ class UserInviteModal extends React.Component {
     super(props);
 
     this.state = {
-      email: '',
+      emailInputValue: '',
       sendEmail: false,
     };
 
@@ -26,14 +26,14 @@ class UserInviteModal extends React.Component {
   }
 
   validEmail() {
-    return this.state.email.match(/.+@.+\..+/) != null;
+    return this.state.emailInputValue.match(/.+@.+\..+/) != null;
   }
 
   async handleSubmit() {
     const { appContainer } = this.props;
 
     try {
-      await appContainer.apiPost('/admin/user/invite', { email: this.state.email, sendEmail: this.state.sendEmail });
+      await appContainer.apiPost('/admin/user/invite', { emailInputValue: this.state.emailInputValue, sendEmail: this.state.sendEmail });
       this.props.onToggleModal();
       toastSuccess('Inviting user success');
     }
@@ -43,7 +43,7 @@ class UserInviteModal extends React.Component {
   }
 
   handleInput(event) {
-    this.setState({ email: event.target.value });
+    this.setState({ emailInputValue: event.target.value });
   }
 
   handleCheckBox() {
@@ -62,10 +62,11 @@ class UserInviteModal extends React.Component {
         </Modal.Header>
         <Modal.Body>
           <label> { t('user_management.emails') }</label>
-          <input
+          <textarea
             className="form-control"
             placeholder="e.g. user@growi.org"
-            value={this.state.email}
+            style={{ height: '200px' }}
+            value={this.state.emailInputValue}
             onChange={this.handleInput}
           />
           {!this.validEmail() && <p className="m-2 text-danger">{ t('user_management.valid_email') }</p>}

+ 7 - 3
src/server/routes/admin.js

@@ -442,7 +442,8 @@ module.exports = function(crowi, app) {
   actions.user.api = api;
 
   api.validators.inviteEmail = [
-    check('email').isEmail().withMessage('Error. Valid email address is required'),
+    // isEmail prevents line breaks, so use isString
+    check('emailInputValue').isString(/.+@.+\..+/).withMessage('Error. Valid email address is required'),
   ];
 
   actions.user.invite = async function(req, res) {
@@ -453,9 +454,12 @@ module.exports = function(crowi, app) {
       return res.json(ApiResponse.error('Valid email address is required'));
     }
 
+    // const array = req.body.emailInputValue.split('\n');
+    // const emailList = array.filter((element) => { return element.match(/.+@.+\..+/) });
+
     try {
-      // TODO GW-170 after inputting multiple people
-      // await User.createUsersByInvitation(req.body.email.split('\n'), req.body.sendEmail);
+      // TODO GW-170 Create users based on mail list passed in array
+      // await User.createUsersByInvitation(req.body.emailList.split('\n'), req.body.sendEmail);
       return res.json(ApiResponse.success());
     }
     catch (err) {