diff --git a/fluxer_app/src/features/channel/components/AutocompleteEmoji.tsx b/fluxer_app/src/features/channel/components/AutocompleteEmoji.tsx index 0f8f51991..31520f70a 100644 --- a/fluxer_app/src/features/channel/components/AutocompleteEmoji.tsx +++ b/fluxer_app/src/features/channel/components/AutocompleteEmoji.tsx @@ -1,10 +1,10 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import {useAnimatedMediaVideoPlayback} from '@app/features/app/hooks/useAnimatedMediaPlayback'; import {useShouldAnimate} from '@app/features/app/hooks/useShouldAnimate'; import {type AutocompleteOption, isEmoji, isMeme, isSticker} from '@app/features/channel/components/Autocomplete'; import styles from '@app/features/channel/components/AutocompleteEmoji.module.css'; import {AutocompleteItem} from '@app/features/channel/components/AutocompleteItem'; +import {AutocompleteMemePreview} from '@app/features/channel/components/AutocompleteMemePreview'; import * as EmojiPickerCommands from '@app/features/emoji/commands/EmojiPickerCommands'; import {useStickerAnimation} from '@app/features/emoji/hooks/useStickerAnimation'; import type {FlatEmoji} from '@app/features/emoji/types/EmojiTypes'; @@ -16,13 +16,12 @@ import { MEDIA_DESCRIPTOR, STICKERS_DESCRIPTOR, } from '@app/features/i18n/utils/CommonMessageDescriptors'; +import {getEmojiRenderUrl} from '@app/features/messaging/utils/markdown/EmojiDetector'; import * as AvatarUtils from '@app/features/user/utils/AvatarUtils'; import {msg} from '@lingui/core/macro'; import {useLingui} from '@lingui/react/macro'; -import {MusicNoteIcon} from '@phosphor-icons/react'; import {observer} from 'mobx-react-lite'; import type React from 'react'; -import {useRef} from 'react'; const DEFAULT_EMOJI_DESCRIPTOR = msg({ message: 'Default emoji', @@ -34,53 +33,53 @@ const SectionHeading = observer(({children}: {children: React.ReactNode}) => ( )); const AutocompleteEmojiIcon = observer(({emoji}: {emoji: FlatEmoji}) => { - const shouldAnimate = useShouldAnimate({kind: 'emoji'}); + const isAnimatable = Boolean(emoji.animated); + const shouldAnimate = useShouldAnimate({ + kind: 'emoji', + isAnimated: isAnimatable, + }); const {url: fallbackDisplayUrl} = getEmojiDisplayData(emoji); - const displayUrl = emoji.id - ? AvatarUtils.getEmojiURL({id: emoji.id, animated: Boolean(emoji.animated) && shouldAnimate}) - : (fallbackDisplayUrl ?? ''); + const displayUrl = + getEmojiRenderUrl({ + id: emoji.id, + surrogateUrl: fallbackDisplayUrl ?? null, + isAnimatable, + animated: shouldAnimate, + jumbo: false, + }) ?? ''; return ( {emoji.name} ); }); const AutocompleteStickerIcon = observer( ({sticker, isInteracting}: {sticker: GuildSticker; isInteracting: boolean}) => { - const {shouldAnimate} = useStickerAnimation({isInteracting}); + const {shouldAnimate} = useStickerAnimation({isInteracting, isAnimated: sticker.animated}); return (
{sticker.name}
); }, ); -const AutocompleteMemeVideo = ({src}: {src: string}) => { - const videoRef = useRef(null); - const playbackAllowed = useAnimatedMediaVideoPlayback(videoRef); - return ( -