فهرست منبع

get username list

https://youtrack.weseek.co.jp/issue/GW-7773
- Convert CommentMentionHelper to ts
- Filter username based on query
- Show username on the hint
I Komang Mudana 3 سال پیش
والد
کامیت
558a4d8644
2فایلهای تغییر یافته به همراه18 افزوده شده و 5 حذف شده
  1. 13 2
      packages/app/src/components/PageEditor/CommentMentionHelper.ts
  2. 5 3
      packages/app/src/server/routes/apiv3/users.js

+ 13 - 2
packages/app/src/components/PageEditor/CommentMentionHelper.tsx → packages/app/src/components/PageEditor/CommentMentionHelper.ts

@@ -1,3 +1,4 @@
+import { apiv3Get } from '~/client/util/apiv3-client';
 
 
 export default class CommentMentionHelper {
 export default class CommentMentionHelper {
 
 
@@ -5,9 +6,10 @@ export default class CommentMentionHelper {
 
 
   pattern: RegExp;
   pattern: RegExp;
 
 
+
   constructor(editor) {
   constructor(editor) {
     this.editor = editor;
     this.editor = editor;
-    this.pattern = /@[A-Za-z0-9._-]*/;
+    this.pattern = /@[A-Za-z0-9._-]{1,}/;
   }
   }
 
 
   showUsernameHint = () => {
   showUsernameHint = () => {
@@ -28,8 +30,10 @@ export default class CommentMentionHelper {
       hint: () => {
       hint: () => {
         const mention = this.editor.getDoc().getRange(sc.from(), sc.to());
         const mention = this.editor.getDoc().getRange(sc.from(), sc.to());
         const username = mention.replace('@', '');
         const username = mention.replace('@', '');
+        const users = this.getUsersList(username);
+
         return {
         return {
-          list: ['username1', 'username2'],
+          list: users,
           from: sc.from(),
           from: sc.from(),
           to: sc.to(),
           to: sc.to(),
         };
         };
@@ -37,4 +41,11 @@ export default class CommentMentionHelper {
     });
     });
   }
   }
 
 
+  getUsersList = async(username) => {
+    const { data } = await apiv3Get('/users/list', { username });
+    return data.users.map(user => ({
+      ...user,
+    }));
+  }
+
 }
 }

+ 5 - 3
packages/app/src/server/routes/apiv3/users.js

@@ -12,9 +12,8 @@ const path = require('path');
 
 
 const { body, query } = require('express-validator');
 const { body, query } = require('express-validator');
 const { isEmail } = require('validator');
 const { isEmail } = require('validator');
-const { serializeUserSecurely } = require('../../models/serializers/user-serializer');
-const { serializePageSecurely } = require('../../models/serializers/page-serializer');
 
 
+const { serializeUserSecurely } = require('../../models/serializers/user-serializer');
 const ErrorV3 = require('../../models/vo/error-apiv3');
 const ErrorV3 = require('../../models/vo/error-apiv3');
 
 
 const PAGE_ITEMS = 50;
 const PAGE_ITEMS = 50;
@@ -899,11 +898,14 @@ module.exports = (crowi) => {
    */
    */
   router.get('/list', accessTokenParser, loginRequired, async(req, res) => {
   router.get('/list', accessTokenParser, loginRequired, async(req, res) => {
     const userIds = req.query.userIds || null;
     const userIds = req.query.userIds || null;
-
+    const username = req.query.username || null;
     let userFetcher;
     let userFetcher;
     if (!userIds || userIds.split(',').length <= 0) {
     if (!userIds || userIds.split(',').length <= 0) {
       userFetcher = User.findAllUsers();
       userFetcher = User.findAllUsers();
     }
     }
+    else if (username !== null) {
+      userFetcher = User.find({ username: { $regex: username } });
+    }
     else {
     else {
       userFetcher = User.findUsersByIds(userIds.split(','));
       userFetcher = User.findUsersByIds(userIds.split(','));
     }
     }