import { hooks } from 'botframework-webchat'; import cx from 'classnames'; import React, { memo, useCallback, type ReactNode } from 'react'; import { useStyles } from '../../styles'; import { isPreChatMessageActivity } from '../preChatActivity'; import computeSuggestedActionText from './private/computeSuggestedActionText'; import RovingFocusProvider from './private/rovingFocus'; import SuggestedAction from './SuggestedAction'; import styles from './SuggestedActions.module.css'; const { useFocus, useLocalizer, useStyleOptions, useStyleSet, useSuggestedActionsHooks, useUIState } = hooks; function SuggestedActionStackedOrFlowContainer( props: Readonly<{ 'aria-label'?: string | undefined; children?: ReactNode | undefined; className?: string | undefined; }> ) { const [{ suggestedActionLayout }] = useStyleOptions(); const [{ suggestedActions: suggestedActionsStyleSet }] = useStyleSet(); const [uiState] = useUIState(); const classNames = useStyles(styles); return (
{uiState !== 'blueprint' && props.children}
); } function SuggestedActions() { const classNames = useStyles(styles); const localize = useLocalizer(); const [suggestedActions, _, { activity }] = useSuggestedActionsHooks().useSuggestedActions(); const focus = useFocus(); const handleEscapeKey = useCallback(() => { focus('sendBox'); }, [focus]); const children = isPreChatMessageActivity(activity) ? [] // Do not show suggested actions for pre-chat message, suggested actions has already shown inlined. : suggestedActions.map((cardAction, index) => { const { displayText, image, imageAltText, text, type, value } = cardAction as { displayText?: string; image?: string; imageAltText?: string; text?: string; type: | 'call' | 'downloadFile' | 'imBack' | 'messageBack' | 'openUrl' | 'playAudio' | 'playVideo' | 'postBack' | 'showImage' | 'signin'; value?: { [key: string]: any } | string; }; if (!suggestedActions?.length) { return null; } return ( ); }); return ( {children} ); } export default memo(SuggestedActions);