From bc4f3dcd01271e08dce8dc63c4517b8c5d77bfb9 Mon Sep 17 00:00:00 2001 From: Josh Perez <60019601+josh-signal@users.noreply.github.com> Date: Fri, 2 Dec 2022 19:40:33 -0500 Subject: [PATCH] Handle cmd+shift+e keyboard shortcut --- ts/components/conversation/TimelineItem.tsx | 1 + .../conversation/TimelineMessage.tsx | 18 +++++++++++++++ ts/hooks/useKeyboardShortcuts.tsx | 22 +++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/ts/components/conversation/TimelineItem.tsx b/ts/components/conversation/TimelineItem.tsx index 60adb19fc..7ac032193 100644 --- a/ts/components/conversation/TimelineItem.tsx +++ b/ts/components/conversation/TimelineItem.tsx @@ -218,6 +218,7 @@ export class TimelineItem extends React.PureComponent { ; export type PropsActions = { @@ -86,6 +89,7 @@ export function TimelineMessage(props: Props): JSX.Element { deleteMessageForEveryone, direction, giftBadge, + isSelected, isSticker, isTapToView, reactToMessage, @@ -233,6 +237,20 @@ export function TimelineMessage(props: Props): JSX.Element { const handleReact = canReact ? () => toggleReactionPicker() : undefined; + const toggleReactionPickerKeyboard = useToggleReactionPicker( + handleReact || noop + ); + + useEffect(() => { + if (isSelected) { + document.addEventListener('keydown', toggleReactionPickerKeyboard); + } + + return () => { + document.removeEventListener('keydown', toggleReactionPickerKeyboard); + }; + }, [isSelected, toggleReactionPickerKeyboard]); + return ( <> unknown +): KeyboardShortcutHandlerType { + return useCallback( + ev => { + const { shiftKey } = ev; + const key = KeyboardLayout.lookup(ev); + + if (isCmdOrCtrl(ev) && shiftKey && (key === 'e' || key === 'E')) { + ev.preventDefault(); + ev.stopPropagation(); + + handleReact(); + return true; + } + + return false; + }, + [handleReact] + ); +} + export function useKeyboardShortcuts( ...eventHandlers: Array ): void {