import React, { memo } from '../../../lib/teact/teact'; import type { FC } from '../../../lib/teact/teact'; import type { ApiAvailableReaction, ApiReaction } from '../../../api/types'; import { IS_COMPACT_MENU } from '../../../util/environment'; import { createClassNameBuilder } from '../../../util/buildClassName'; import useMedia from '../../../hooks/useMedia'; import useFlag from '../../../hooks/useFlag'; import AnimatedSticker from '../../common/AnimatedSticker'; import './ReactionSelectorReaction.scss'; const REACTION_SIZE = IS_COMPACT_MENU ? 24 : 32; type OwnProps = { reaction: ApiAvailableReaction; previewIndex: number; isReady?: boolean; chosen?: boolean; onToggleReaction: (reaction: ApiReaction) => void; }; const cn = createClassNameBuilder('ReactionSelectorReaction'); const ReactionSelectorReaction: FC = ({ reaction, previewIndex, isReady, chosen, onToggleReaction, }) => { const mediaData = useMedia(`document${reaction.selectAnimation?.id}`, !isReady); const [isActivated, activate, deactivate] = useFlag(); const [isAnimationLoaded, markAnimationLoaded] = useFlag(); const shouldRenderStatic = !isReady || !isAnimationLoaded; const shouldRenderAnimated = Boolean(isReady && mediaData); function handleClick() { onToggleReaction(reaction.reaction); } return (
{shouldRenderStatic && (
)} {shouldRenderAnimated && ( )}
); }; export default memo(ReactionSelectorReaction);