@@ -10,28 +10,44 @@ import CustomEmoji from '../../../EmojiPicker/CustomEmoji';
1010import MarkdownContext from '../../contexts/MarkdownContext' ;
1111import { useAppSelector } from '../../../../lib/hooks' ;
1212import { getUserSelector } from '../../../../selectors/login' ;
13+ import { useResponsiveLayout } from '../../../../lib/hooks/useResponsiveLayout/useResponsiveLayout' ;
1314
1415interface IEmojiProps {
1516 block : EmojiProps ;
1617 isBigEmoji ?: boolean ;
1718 style ?: object ;
1819 index ?: number ;
20+ isAvatar ?: boolean ;
1921}
2022
21- const Emoji = ( { block, isBigEmoji, style = { } , index } : IEmojiProps ) => {
23+ function getEmojiToken ( block : EmojiProps , isAvatar : boolean ) {
24+ if ( 'unicode' in block ) {
25+ return block . unicode ;
26+ }
27+
28+ if ( isAvatar ) {
29+ return block . value ?. value ;
30+ }
31+
32+ return block ?. shortCode ? `:${ block . shortCode } :` : `:${ block . value ?. value } :` ;
33+ }
34+
35+ const Emoji = ( { block, isBigEmoji, style = { } , index, isAvatar = false } : IEmojiProps ) => {
2236 const { colors } = useTheme ( ) ;
2337 const { getCustomEmoji } = useContext ( MarkdownContext ) ;
2438 const { fontScale } = useWindowDimensions ( ) ;
39+ const { fontScaleLimited } = useResponsiveLayout ( ) ;
2540 const { formatShortnameToUnicode } = useShortnameToUnicode ( ) ;
2641 const spaceLeft = index && index > 0 ? ' ' : '' ;
2742 const convertAsciiEmoji = useAppSelector ( state => getUserSelector ( state ) ?. settings ?. preferences ?. convertAsciiEmoji ) ;
43+
2844 if ( 'unicode' in block ) {
2945 return < Text style = { [ { color : colors . fontDefault } , isBigEmoji ? styles . textBig : styles . text ] } > { block . unicode } </ Text > ;
3046 }
3147
32- const emojiToken = block ?. shortCode ? `: ${ block . shortCode } :` : `: ${ block . value ?. value } :` ;
48+ const emojiToken = getEmojiToken ( block , isAvatar ) ;
3349 const emojiUnicode = formatShortnameToUnicode ( emojiToken ) ;
34- const emoji = getCustomEmoji ?.( block . value ?. value ) ;
50+ const emoji = getCustomEmoji ?.( block . value ?. value . replace ( / \: / g , '' ) ) ;
3551 const isAsciiEmoji = ! ! block ?. shortCode && block . value ?. value !== block ?. shortCode ;
3652 const displayAsciiEmoji = ! convertAsciiEmoji && isAsciiEmoji && ! ! block . value ;
3753 const customEmojiSize = {
@@ -44,12 +60,25 @@ const Emoji = ({ block, isBigEmoji, style = {}, index }: IEmojiProps) => {
4460 height : 30 * fontScale
4561 } ;
4662
63+ const avatarStyle = {
64+ fontSize : 30 * fontScaleLimited ,
65+ lineHeight : 30 * fontScaleLimited ,
66+ textAlign : 'center' ,
67+ textAlignVertical : 'center'
68+ } ;
69+
4770 if ( emoji ) {
4871 return < CustomEmoji style = { [ isBigEmoji ? customEmojiBigSize : customEmojiSize , style ] } emoji = { emoji } /> ;
4972 }
73+
5074 return (
5175 < Text
52- style = { [ { color : colors . fontDefault } , isBigEmoji && emojiToken !== emojiUnicode ? styles . textBig : styles . text , style ] } >
76+ style = { [
77+ { color : colors . fontDefault } ,
78+ isBigEmoji && emojiToken !== emojiUnicode ? styles . textBig : styles . text ,
79+ style ,
80+ isAvatar && avatarStyle
81+ ] } >
5382 { spaceLeft }
5483 { displayAsciiEmoji ? < Plain value = { block . value ! . value } /> : emojiUnicode }
5584 </ Text >
0 commit comments