import React, { FC, memo, useEffect } from '../../../lib/teact/teact'; import { withGlobal } from '../../../lib/teact/teactn'; import { GlobalActions } from '../../../global/types'; import { ApiMessage } from '../../../api/types'; import { IS_TOUCH_ENV } from '../../../util/environment'; import { pick } from '../../../util/iteratees'; import { selectChatMessage, selectCurrentMessageList } from '../../../modules/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; }; type DispatchProps = Pick; const BotKeyboardMenu: FC = ({ isOpen, message, onClose, clickInlineButton, }) => { const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose); const { isKeyboardSingleUse } = message || {}; const [forceOpen, markForceOpen, unmarkForceOpen] = useFlag(true); const handleClose = () => { unmarkForceOpen(); onClose(); }; useEffect(() => { markForceOpen(); }, [markForceOpen, message]); 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) }; }, (setGlobal, actions): DispatchProps => pick(actions, [ 'clickInlineButton', ]), )(BotKeyboardMenu));