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;