Browse Source

Merge pull request #4273 from Ben0it-T/user-mentions

Fix user mentions
Lauri Ojansivu 3 years ago
parent
commit
65b7d3d50d
3 changed files with 20 additions and 11 deletions
  1. 4 1
      client/components/lists/listBody.js
  2. 15 9
      client/components/main/editor.js
  3. 1 1
      models/activities.js

+ 4 - 1
client/components/lists/listBody.js

@@ -336,7 +336,7 @@ BlazeComponent.extendComponent({
       [
         // User mentions
         {
-          match: /\B@([\w.]*)$/,
+          match: /\B@([\w.-]*)$/,
           search(term, callback) {
             const currentBoard = Boards.findOne(Session.get('currentBoard'));
             callback(
@@ -347,6 +347,9 @@ BlazeComponent.extendComponent({
             );
           },
           template(user) {
+            if (user.profile && user.profile.fullname) {
+              return (user.username + " (" + user.profile.fullname + ")");
+            }
             return user.username;
           },
           replace(user) {

+ 15 - 9
client/components/main/editor.js

@@ -11,7 +11,7 @@ BlazeComponent.extendComponent({
     const mentions = [
       // User mentions
       {
-        match: /\B@([\w.]*)$/,
+        match: /\B@([\w.-]*)$/,
         search(term, callback) {
           const currentBoard = Boards.findOne(Session.get('currentBoard'));
           callback(
@@ -21,17 +21,23 @@ BlazeComponent.extendComponent({
               .map(member => {
                 const user = Users.findOne(member.userId);
                 const username = user.username;
-                const fullName = user.profile && user.profile !== undefined ?  user.profile.fullname : "";
-                return username.includes(term) || fullName.includes(term) ?  fullName + "(" + username + ")" : null;
+                const fullName = user.profile && user.profile !== undefined && user.profile.fullname ? user.profile.fullname : "";
+                return username.includes(term) || fullName.includes(term) ? user : null;
               })
-              .filter(Boolean), [...specialHandleNames])
+              .filter(Boolean), [...specialHandles])
           );
         },
-        template(value) {
-          return value;
+        template(user) {
+          if (user.profile && user.profile.fullname) {
+            return (user.profile.fullname + " (" + user.username + ")");
+          }
+          return user.username;
         },
-        replace(username) {
-          return `@${username} `;
+        replace(user) {
+          if (user.profile && user.profile.fullname) {
+            return `@${user.username} (${user.profile.fullname}) `;
+          }
+          return `@${user.username} `;
         },
         index: 1,
       },
@@ -355,7 +361,7 @@ Blaze.Template.registerHelper(
       }
       return member;
     }), [...specialHandles]);
-    const mentionRegex = /\B@([\w.]*)/gi;
+    const mentionRegex = /\B@([\w.-]*)/gi;
 
     let currentMention;
     while ((currentMention = mentionRegex.exec(content)) !== null) {

+ 1 - 1
models/activities.js

@@ -202,7 +202,7 @@ if (Meteor.isServer) {
           }
           return member;
         });
-        const mentionRegex = /\B@(?:(?:"([\w.\s]*)")|([\w.]+))/gi; // including space in username
+        const mentionRegex = /\B@(?:(?:"([\w.\s-]*)")|([\w.-]+))/gi; // including space in username
         let currentMention;
         while ((currentMention = mentionRegex.exec(comment)) !== null) {
           /*eslint no-unused-vars: ["error", { "varsIgnorePattern": "[iI]gnored" }]*/