import type { FC, TeactNode } from '../../../lib/teact/teact'; import { memo, useMemo } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; import type { ApiMessage } from '../../../api/types'; import type { ThreadId } from '../../../types'; import { selectChatMessage, selectCurrentMessageList } from '../../../global/selectors'; import { IS_TOUCH_ENV } from '../../../util/browser/windowEnvironment'; import renderKeyboardButtonText from './helpers/renderKeyboardButtonText'; import useMouseInside from '../../../hooks/useMouseInside'; import useOldLang from '../../../hooks/useOldLang'; import Button from '../../ui/Button'; import Menu from '../../ui/Menu'; import './BotKeyboardMenu.scss'; export type OwnProps = { isOpen: boolean; messageId: number; threadId?: ThreadId; onClose: NoneToVoidFunction; }; type StateProps = { message?: ApiMessage; }; const BotKeyboardMenu: FC = ({ isOpen, message, onClose, threadId, }) => { const { clickBotInlineButton } = getActions(); const lang = useOldLang(); const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose); const { isKeyboardSingleUse } = message || {}; const buttonTexts = useMemo(() => { const texts: TeactNode[][] = []; message?.keyboardButtons!.forEach((row) => { texts.push(row.map((button) => renderKeyboardButtonText(lang, button))); }); return texts; }, [lang, message?.keyboardButtons]); if (!message || !message.keyboardButtons) { return undefined; } return (
{message.keyboardButtons.map((row, i) => (
{row.map((button, j) => ( ))}
))}
); }; export default memo(withGlobal( (global, { messageId }): StateProps => { const { chatId } = selectCurrentMessageList(global) || {}; if (!chatId) { return {}; } return { message: selectChatMessage(global, chatId, messageId) }; }, )(BotKeyboardMenu));