import type { RefObject } from 'react'; import React, { useCallback, memo, useEffect, useRef, } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; import type { FC } from '../../../lib/teact/teact'; import type { ApiSticker } from '../../../api/types'; import { selectIsContextMenuTranslucent } from '../../../global/selectors'; import useFlag from '../../../hooks/useFlag'; import Menu from '../../ui/Menu'; import Portal from '../../ui/Portal'; import CustomEmojiPicker from '../../common/CustomEmojiPicker'; import styles from './StatusPickerMenu.module.scss'; export type OwnProps = { isOpen: boolean; statusButtonRef: RefObject; onEmojiStatusSelect: (emojiStatus: ApiSticker) => void; onClose: () => void; }; interface StateProps { areFeaturedStickersLoaded?: boolean; isTranslucent?: boolean; } const StatusPickerMenu: FC = ({ isOpen, statusButtonRef, areFeaturedStickersLoaded, isTranslucent, onEmojiStatusSelect, onClose, }) => { const { loadFeaturedEmojiStickers } = getActions(); const transformOriginX = useRef(); const [isContextMenuShown, markContextMenuShown, unmarkContextMenuShown] = useFlag(); 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): StateProps => { return { areFeaturedStickersLoaded: Boolean(global.customEmojis.featuredIds?.length), isTranslucent: selectIsContextMenuTranslucent(global), }; })(StatusPickerMenu));