Fix wrapping emoji for avatars

This commit is contained in:
Eduard Kuzmenko 2022-12-02 19:19:06 +04:00
parent 1d91b109e0
commit bb7ef5c762
2 changed files with 24 additions and 6 deletions

View File

@ -5,17 +5,34 @@
*/
import wrapEmojiText from './wrapEmojiText';
import emojiRegExp from '../../vendor/emoji/regex';
import {MessageEntity} from '../../layer';
import getEmojiEntityFromEmoji from './getEmojiEntityFromEmoji';
const EMOJI_REG_EXP = new RegExp(`(^${emojiRegExp})`);
export default function getAbbreviation(str: string, onlyFirst = false) {
if(!str) return '';
const splitted = str.trim().split(' ');
if(!splitted[0]) return '';
const first = [...splitted[0]][0];
const entities: MessageEntity.messageEntityEmoji[] = [];
if(onlyFirst || splitted.length === 1) return wrapEmojiText(first);
const firstEmojiMatch = splitted[0].match(EMOJI_REG_EXP);
const first = firstEmojiMatch?.[0] || splitted[0][0];
if(firstEmojiMatch) {
entities.push(getEmojiEntityFromEmoji(first));
}
const last = [...splitted[splitted.length - 1]][0];
if(onlyFirst || splitted.length === 1) return wrapEmojiText(first, undefined, entities);
return wrapEmojiText(first + last);
const lastEmojiMatch = splitted[1].match(EMOJI_REG_EXP);
const last = lastEmojiMatch?.[0] || splitted[1][0];
if(lastEmojiMatch) {
entities.push({
...getEmojiEntityFromEmoji(last),
offset: last.length
});
}
return wrapEmojiText(first + last, undefined, entities);
}

View File

@ -4,12 +4,13 @@
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import {MessageEntity} from '../../layer';
import parseEntities from './parseEntities';
import wrapRichText from './wrapRichText';
export default function wrapEmojiText(text: string, isDraft = false) {
export default function wrapEmojiText(text: string, isDraft = false, entities?: MessageEntity[]) {
if(!text) return wrapRichText('');
const entities = parseEntities(text).filter((e) => e._ === 'messageEntityEmoji');
entities ??= parseEntities(text).filter((e) => e._ === 'messageEntityEmoji');
return wrapRichText(text, {entities, wrappingDraft: isDraft});
}