diff --git a/client/components/main/editor.js b/client/components/main/editor.js index 7437c2306..09ce2a015 100644 --- a/client/components/main/editor.js +++ b/client/components/main/editor.js @@ -1,3 +1,9 @@ +const specialHandles = [ + {userId: 'board_members', username: 'board_members'}, + {userId: 'card_members', username: 'card_members'} +]; +const specialHandleNames = specialHandles.map(m => m.username); + Template.editor.onRendered(() => { const textareaSelector = 'textarea'; const mentions = [ @@ -7,13 +13,14 @@ Template.editor.onRendered(() => { search(term, callback) { const currentBoard = Boards.findOne(Session.get('currentBoard')); callback( + _.union( currentBoard .activeMembers() .map(member => { const username = Users.findOne(member.userId).username; return username.includes(term) ? username : null; }) - .filter(Boolean), + .filter(Boolean), [...specialHandleNames]) ); }, template(value) { @@ -323,13 +330,13 @@ Blaze.Template.registerHelper( return HTML.Raw( DOMPurify.sanitize(content, { ALLOW_UNKNOWN_PROTOCOLS: true }), ); - const knowedUsers = currentBoard.members.map(member => { + const knowedUsers = _.union(currentBoard.members.map(member => { const u = Users.findOne(member.userId); if (u) { member.username = u.username; } return member; - }); + }), [...specialHandles]); const mentionRegex = /\B@([\w.]*)/gi; let currentMention; diff --git a/models/activities.js b/models/activities.js index 5fb01bd68..914af768b 100644 --- a/models/activities.js +++ b/models/activities.js @@ -210,15 +210,30 @@ if (Meteor.isServer) { // ignore commenter mention himself? continue; } - const atUser = _.findWhere(knownUsers, { username }); - if (!atUser) { - continue; + + if (activity.boardId && username === 'board_members') { + // mentions all board members + const knownUids = knownUsers.map(u => u.userId); + watchers = _.union(watchers, [...knownUids]); + title = 'act-atUserComment'; + } else if (activity.cardId && username === 'card_members') { + // mentions all card members if assigned + const card = activity.card(); + watchers = _.union(watchers, [...card.members]); + title = 'act-atUserComment'; + } else { + const atUser = _.findWhere(knownUsers, { username }); + if (!atUser) { + continue; + } + + const uid = atUser.userId; + params.atUsername = username; + params.atEmails = atUser.emails; + title = 'act-atUserComment'; + watchers = _.union(watchers, [uid]); } - const uid = atUser.userId; - params.atUsername = username; - params.atEmails = atUser.emails; - title = 'act-atUserComment'; - watchers = _.union(watchers, [uid]); + } } params.commentId = comment._id;