From 987778b73714f0c2ce671f36e27457fdee78bcb4 Mon Sep 17 00:00:00 2001 From: Reinaldo Neto <47038980+reinaldonetof@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:47:12 -0300 Subject: [PATCH] fix: duplicate users during mention (#5233) --- app/lib/methods/search.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/lib/methods/search.ts b/app/lib/methods/search.ts index 74daef34c..496006e4f 100644 --- a/app/lib/methods/search.ts +++ b/app/lib/methods/search.ts @@ -107,12 +107,18 @@ export const search = async ({ text = '', filterUsers = true, filterRooms = true } let localSearchData = []; + // the users provided by localSearchUsersMessageByRid return the username properly, data.username + // Example: Diego Mello's user -> {name: "Diego Mello", username: "diego.mello"} + // Meanwhile, the username provided by localSearchSubscription is in name's property + // Example: Diego Mello's subscription -> {fname: "Diego Mello", name: "diego.mello"} + let usernames = []; if (rid) { localSearchData = await localSearchUsersMessageByRid({ text, rid }); + usernames = localSearchData.map(sub => sub.username as string); } else { localSearchData = await localSearchSubscription({ text, filterUsers, filterRooms }); + usernames = localSearchData.map(sub => sub.name as string); } - const usernames = localSearchData.map(sub => sub.name as string); const data: TSearch[] = localSearchData; @@ -126,7 +132,13 @@ export const search = async ({ text = '', filterUsers = true, filterRooms = true if (filterUsers) { users .filter((item1, index) => users.findIndex(item2 => item2._id === item1._id) === index) // Remove duplicated data from response - .filter(user => !data.some(sub => user.username === sub.name)) // Make sure to remove users already on local database + .filter( + user => + !data.some(sub => + // Check comments at usernames' declaration + rid && 'username' in sub ? user.username === sub.username : user.username === sub.name + ) + ) // Make sure to remove users already on local database .forEach(user => { data.push({ ...user,