From f7a91eb0a11202f4ea118a47e707e8a027e78a64 Mon Sep 17 00:00:00 2001 From: yash-rajpal Date: Mon, 27 Jul 2026 15:11:23 +0530 Subject: [PATCH 1/2] dont show legacy emoji in composer popup --- apps/meteor/app/emoji/lib/rocketchat.ts | 2 ++ .../client/views/room/providers/ComposerPopupProvider.tsx | 8 ++++++-- apps/meteor/client/views/root/hooks/useNativeEmoji.ts | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/meteor/app/emoji/lib/rocketchat.ts b/apps/meteor/app/emoji/lib/rocketchat.ts index a72da9a1e88c6..2b99d4f4b7c5a 100644 --- a/apps/meteor/app/emoji/lib/rocketchat.ts +++ b/apps/meteor/app/emoji/lib/rocketchat.ts @@ -34,6 +34,7 @@ export type EmojiPackages = { extension?: string; etag?: string; unicode?: string; + legacy?: boolean; } | { name?: undefined; @@ -43,6 +44,7 @@ export type EmojiPackages = { aliases?: undefined; shortnames?: undefined; etag?: string; + legacy?: boolean; }; }; }; diff --git a/apps/meteor/client/views/room/providers/ComposerPopupProvider.tsx b/apps/meteor/client/views/room/providers/ComposerPopupProvider.tsx index 5dbfec63d9d03..cff7047a7a702 100644 --- a/apps/meteor/client/views/room/providers/ComposerPopupProvider.tsx +++ b/apps/meteor/client/views/room/providers/ComposerPopupProvider.tsx @@ -249,7 +249,9 @@ const ComposerPopupProvider = ({ children, room }: ComposerPopupProviderProps) = }) .filter( ({ _id }) => - filterRegex.test(_id) && (exactFinalTone.test(_id.substring(key.length)) || seeColor.test(key) || !colorBlind.test(_id)), + !collection[_id]?.legacy && + filterRegex.test(_id) && + (exactFinalTone.test(_id.substring(key.length)) || seeColor.test(key) || !colorBlind.test(_id)), ) .sort(emojiSort(recents)) .slice(0, 10); @@ -307,7 +309,9 @@ const ComposerPopupProvider = ({ children, room }: ComposerPopupProviderProps) = }) .filter( ({ _id }) => - filterRegex.test(_id) && (exactFinalTone.test(_id.substring(key.length)) || seeColor.test(key) || !colorBlind.test(_id)), + !collection[_id]?.legacy && + filterRegex.test(_id) && + (exactFinalTone.test(_id.substring(key.length)) || seeColor.test(key) || !colorBlind.test(_id)), ) .sort(emojiSort(recents)) .slice(0, 10); diff --git a/apps/meteor/client/views/root/hooks/useNativeEmoji.ts b/apps/meteor/client/views/root/hooks/useNativeEmoji.ts index 59533074b0596..53ee709bab949 100644 --- a/apps/meteor/client/views/root/hooks/useNativeEmoji.ts +++ b/apps/meteor/client/views/root/hooks/useNativeEmoji.ts @@ -45,6 +45,7 @@ export const useNativeEmoji = () => { category: '', emojiPackage: 'native', unicode, + legacy: true, }; } From 52de5d7ab4ef65cf7252b7e06099e5de790000fb Mon Sep 17 00:00:00 2001 From: yash-rajpal Date: Mon, 27 Jul 2026 21:17:56 +0530 Subject: [PATCH 2/2] explicitly remove legacy emoji from emoji-pciker and unit tests --- apps/meteor/app/emoji/client/helpers.ts | 7 +++- .../tests/unit/app/emoji/helpers.spec.ts | 39 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/apps/meteor/app/emoji/client/helpers.ts b/apps/meteor/app/emoji/client/helpers.ts index a1516352e941e..7e0338da20643 100644 --- a/apps/meteor/app/emoji/client/helpers.ts +++ b/apps/meteor/app/emoji/client/helpers.ts @@ -172,7 +172,12 @@ export const getEmojisBySearchTerm = ( continue; } - const { emojiPackage, shortnames = [], name } = emojiObject; + const { emojiPackage, shortnames = [], name, legacy } = emojiObject; + + if (legacy) { + continue; + } + let tone = ''; current = current.replace(/:/g, ''); diff --git a/apps/meteor/tests/unit/app/emoji/helpers.spec.ts b/apps/meteor/tests/unit/app/emoji/helpers.spec.ts index ff9853889de37..f0db397bfdade 100644 --- a/apps/meteor/tests/unit/app/emoji/helpers.spec.ts +++ b/apps/meteor/tests/unit/app/emoji/helpers.spec.ts @@ -4,6 +4,7 @@ import { describe, it, beforeEach, before } from 'mocha'; import { getEmojisBySearchTerm, updateRecent, removeFromRecent, replaceEmojiInRecent } from '../../../../app/emoji/client/helpers'; import { emoji } from '../../../../app/emoji/client/lib'; import { getEmojiConfig } from '../../../../app/emoji-native/lib/getEmojiConfig'; +import { legacyEmojioneMap } from '../../../../app/emoji-native/lib/legacyEmojioneMap'; const registerNativeEmojis = () => { const config = getEmojiConfig(emoji); @@ -27,6 +28,27 @@ const registerNativeEmojis = () => { }); } } + + //Add legacy emojis to mimic how client currently works. + for (const [shortcode, unicode] of Object.entries(legacyEmojioneMap)) { + const key = `:${shortcode}:`; + + if (emoji.list[key]) { + continue; // already registered by emojibase + } + + emoji.list[key] = { + uc_base: '', + uc_output: '', + uc_match: '', + uc_greedy: '', + shortnames: [], + category: '', + legacy: true, + emojiPackage: 'native', + unicode, + }; + } }; describe('Emoji Client Helpers', () => { @@ -66,6 +88,23 @@ describe('Emoji Client Helpers', () => { expect(names('+1').some((name) => /_tone[1-5]/.test(name))).to.be.false; }); + it('excludes legacy-only names from the results', () => { + expect(names('dog2')).to.be.empty; + }); + + it('excludes legacy-only names from partial matches', () => { + expect(names('dog')).to.not.include('dog2'); + }); + + it('keeps the emojibase name for the same emoji searchable', () => { + expect(names('dog')).to.include('dog'); + expect(names('dog')).to.include('dog_face'); + }); + + it('still renders a legacy shortcode entered manually', () => { + expect(emoji.packages.native.render(':dog2:')).to.include(legacyEmojioneMap.dog2); + }); + it('applies the selected skin tone when searching by an alias', () => { const result = getEmojisBySearchTerm('thumbsup', 2, [], () => undefined).find(({ image }) => image?.includes('👍'));