import type { ElementRef } from '../../../lib/teact/teact'; import { memo, useCallback, useEffect, useRef, } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; import type { ApiSticker } from '../../../api/types'; import { selectIsContextMenuTranslucent } from '../../../global/selectors'; import CustomEmojiPicker from '../../common/CustomEmojiPicker'; import Menu from '../../ui/Menu'; import Portal from '../../ui/Portal'; import styles from './StatusPickerMenu.module.scss'; export type OwnProps = { isOpen: boolean; statusButtonRef: ElementRef; onEmojiStatusSelect: (emojiStatus: ApiSticker) => void; onClose: () => void; }; interface StateProps { areFeaturedStickersLoaded?: boolean; isTranslucent?: boolean; } const StatusPickerMenu = ({ isOpen, statusButtonRef, areFeaturedStickersLoaded, isTranslucent, onEmojiStatusSelect, onClose, }: OwnProps & StateProps) => { const { loadFeaturedEmojiStickers } = getActions(); const transformOriginX = useRef(0); useEffect(() => { transformOriginX.current = statusButtonRef.current!.getBoundingClientRect().right; }, [isOpen, statusButtonRef]); useEffect(() => { if (isOpen && !areFeaturedStickersLoaded) { loadFeaturedEmojiStickers(); } }, [areFeaturedStickersLoaded, isOpen, loadFeaturedEmojiStickers]); const handleEmojiSelect = useCallback((sticker: ApiSticker) => { onEmojiStatusSelect(sticker); onClose(); }, [onClose, onEmojiStatusSelect]); return ( ); }; export default memo(withGlobal((global): Complete => { return { areFeaturedStickersLoaded: Boolean(global.customEmojis.featuredIds?.length), isTranslucent: selectIsContextMenuTranslucent(global), }; })(StatusPickerMenu));