import { Components } from 'botframework-webchat'; import cx from 'classnames'; import React, { memo, useCallback, useEffect, useRef, type KeyboardEventHandler, type ReactNode } from 'react'; import { useRefFrom } from 'use-ref-from'; // import HorizontalDialPadController from './HorizontalDialPadController'; import { useStyles } from '../../../styles'; import testIds from '../../../testIds'; import { FluentIcon } from '../../icon'; import { type DTMF } from '../types'; import useShown from '../useShown'; import Button from './Button'; import styles from './TelephoneKeypad.module.css'; const { LocalizedString } = Components; type Props = Readonly<{ autoFocus?: boolean | undefined; className?: string | undefined; isHorizontal: boolean; onButtonClick: (button: DTMF) => void; }>; const Orientation = memo( ({ children, isHorizontal }: Readonly<{ children?: ReactNode | undefined; isHorizontal: boolean }>) => { const classNames = useStyles(styles); return isHorizontal ? null : ( // {children}
{children}
); } ); Orientation.displayName = 'TelephoneKeypad:Orientation'; const TelephoneKeypad = memo(({ autoFocus, className, onButtonClick, isHorizontal }: Props) => { const autoFocusRef = useRefFrom(autoFocus); const classNames = useStyles(styles); const firstButtonRef = useRef(null); const onButtonClickRef = useRefFrom(onButtonClick); const [, setShown] = useShown(); const handleButton1Click = useCallback(() => onButtonClickRef.current?.('1'), [onButtonClickRef]); const handleButton2Click = useCallback(() => onButtonClickRef.current?.('2'), [onButtonClickRef]); const handleButton3Click = useCallback(() => onButtonClickRef.current?.('3'), [onButtonClickRef]); const handleButton4Click = useCallback(() => onButtonClickRef.current?.('4'), [onButtonClickRef]); const handleButton5Click = useCallback(() => onButtonClickRef.current?.('5'), [onButtonClickRef]); const handleButton6Click = useCallback(() => onButtonClickRef.current?.('6'), [onButtonClickRef]); const handleButton7Click = useCallback(() => onButtonClickRef.current?.('7'), [onButtonClickRef]); const handleButton8Click = useCallback(() => onButtonClickRef.current?.('8'), [onButtonClickRef]); const handleButton9Click = useCallback(() => onButtonClickRef.current?.('9'), [onButtonClickRef]); const handleButton0Click = useCallback(() => onButtonClickRef.current?.('0'), [onButtonClickRef]); const handleButtonStarClick = useCallback(() => onButtonClickRef.current?.('*'), [onButtonClickRef]); const handleButtonPoundClick = useCallback(() => onButtonClickRef.current?.('#'), [onButtonClickRef]); const handleKeyDown = useCallback>( event => { if (event.key === 'Escape') { // TODO: Should send focus to the send box. setShown(false); } }, [setShown] ); useEffect(() => { autoFocusRef.current && firstButtonRef.current?.focus(); }, [autoFocusRef, firstButtonRef]); return (
); }); TelephoneKeypad.displayName = 'TelephoneKeypad'; export default TelephoneKeypad;