import React, { FC, memo, useCallback, useEffect, } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; import { ApiMessage } from '../../../api/types'; import { IS_TOUCH_ENV } from '../../../util/environment'; import { selectChatMessage, selectCurrentMessageList } from '../../../global/selectors'; import useMouseInside from '../../../hooks/useMouseInside'; import useFlag from '../../../hooks/useFlag'; import Menu from '../../ui/Menu'; import Button from '../../ui/Button'; import './BotKeyboardMenu.scss'; export type OwnProps = { isOpen: boolean; messageId: number; onClose: NoneToVoidFunction; }; type StateProps = { message?: ApiMessage; }; const BotKeyboardMenu: FC = ({ isOpen, message, onClose, }) => { const { clickInlineButton } = getActions(); const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose); const { isKeyboardSingleUse } = message || {}; const [forceOpen, markForceOpen, unmarkForceOpen] = useFlag(true); const handleClose = useCallback(() => { unmarkForceOpen(); onClose(); }, [onClose, unmarkForceOpen]); useEffect(() => { markForceOpen(); }, [markForceOpen, message?.keyboardButtons]); if (!message || !message.keyboardButtons) { return undefined; } return (
{message.keyboardButtons.map((row) => (
{row.map((button) => ( ))}
))}
); }; export default memo(withGlobal( (global, { messageId }): StateProps => { const { chatId } = selectCurrentMessageList(global) || {}; if (!chatId) { return {}; } return { message: selectChatMessage(global, chatId, messageId) }; }, )(BotKeyboardMenu));