user_status: Fix status emoji handling of deactivated custom emoji.

Previously, if a user had a realm emoji set as their status emoji and
someone deleted the realm emoji, the app would fail to initialize,
because of the error we throw from `./shared/js/emoji.js`.

This commit fixes this by just displaying the deactivated emoji,
similar to how we do when realm_emoji used as reactions are deleted.

As part of the fix, we add a function get_emoji_details_for_rendering,
which duplicates some of the logic used in `reactions.js`, we can
refactor to remove the duplication in `reactions.js` in future
commits.

Note that the following behaviour is a part of our design:
If a user sets their emoji to a particular realm emoji, say for
example "octo-ninja", and "octo-ninja" was then deleted, and a new
emoji was added with the name "octo-ninja", the user's status emoji
would change to show the new emoji instead of the deleted emoji.

Also note that in the `user_status.js` node test, we were able to
change the name for the 991 realm_emoji because it had not been
previously used anywhere in the test (possibly added as just a copy
paste artifact?).

Fixes: #20274.

emoji: Use reaction_type parameter to analyze emoji.
This commit is contained in:
YashRE42
2021-11-20 14:44:52 +05:30
committed by Tim Abbott
parent 85a566aa80
commit 263a79738f
4 changed files with 98 additions and 12 deletions

View File

@@ -77,11 +77,12 @@ export function set_status_emoji(opts) {
}
user_status_emoji_info.set(opts.user_id, {
emoji_name: opts.emoji_name,
emoji_code: opts.emoji_code,
reaction_type: opts.reaction_type,
emoji_alt_code: user_settings.emojiset === "text",
...emoji.get_emoji_details_by_name(opts.emoji_name),
...emoji.get_emoji_details_for_rendering({
emoji_name: opts.emoji_name,
emoji_code: opts.emoji_code,
reaction_type: opts.reaction_type,
}),
});
}
@@ -104,10 +105,7 @@ export function initialize(params) {
if (dct.emoji_name) {
user_status_emoji_info.set(user_id, {
emoji_name: dct.emoji_name,
emoji_code: dct.emoji_code,
reaction_type: dct.reaction_type,
...emoji.get_emoji_details_by_name(dct.emoji_name),
...emoji.get_emoji_details_for_rendering(dct),
});
}
}