From b222b4f70864b8cd98b8fc36c7c310ea75b7957a Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 12 May 2022 12:07:04 +0100 Subject: [PATCH] Fix hold-to-speak and prompt text on mobile --- src/room/PTTButton.tsx | 50 +++++++++++++++++++++++------- src/room/PTTCallView.module.css | 6 ++++ src/room/PTTCallView.tsx | 54 +++++++++++++++++++++++++++------ 3 files changed, 90 insertions(+), 20 deletions(-) diff --git a/src/room/PTTButton.tsx b/src/room/PTTButton.tsx index 10f45ed..6638370 100644 --- a/src/room/PTTButton.tsx +++ b/src/room/PTTButton.tsx @@ -43,23 +43,50 @@ export const PTTButton: React.FC = ({ stopTalking, }) => { const [isHeld, setHeld] = useState(false); - const onDocumentMouseUp = useCallback(() => { - if (isHeld) stopTalking(); - setHeld(false); - }, [isHeld, setHeld, stopTalking]); + const onWindowMouseUp = useCallback( + (e) => { + if (isHeld) stopTalking(); + setHeld(false); + }, + [isHeld, setHeld, stopTalking] + ); - const onButtonMouseDown = useCallback(() => { - setHeld(true); - startTalking(); - }, [setHeld, startTalking]); + const onWindowTouchEnd = useCallback( + (e: TouchEvent) => { + e.preventDefault(); + if (isHeld) stopTalking(); + setHeld(false); + }, + [isHeld, setHeld, stopTalking] + ); + + const onButtonMouseDown = useCallback( + (e: React.MouseEvent) => { + e.preventDefault(); + setHeld(true); + startTalking(); + }, + [setHeld, startTalking] + ); + + const onButtonTouchStart = useCallback( + (e: React.TouchEvent) => { + e.preventDefault(); + setHeld(true); + startTalking(); + }, + [setHeld, startTalking] + ); useEffect(() => { - window.addEventListener("mouseup", onDocumentMouseUp); + window.addEventListener("mouseup", onWindowMouseUp); + window.addEventListener("touchend", onWindowTouchEnd); return () => { - window.removeEventListener("mouseup", onDocumentMouseUp); + window.removeEventListener("mouseup", onWindowMouseUp); + window.removeEventListener("touchend", onWindowTouchEnd); }; - }, [onDocumentMouseUp]); + }, [onWindowMouseUp, onWindowTouchEnd]); return (