Fix hotkeys getting stuck on cmd+tab

This commit is contained in:
Gregory Schier
2024-01-07 21:32:25 -08:00
parent 08a1223482
commit caf39071af
3 changed files with 15 additions and 4 deletions

View File

@@ -55,6 +55,7 @@ export function Sidebar({ className }: Props) {
const { hidden } = useSidebarHidden();
const sidebarRef = useRef<HTMLLIElement>(null);
const activeRequestId = useActiveRequestId();
const duplicateRequest = useDuplicateRequest({ id: activeRequestId ?? '', navigateAfter: true });
const activeEnvironmentId = useActiveEnvironmentId();
const requests = useRequests();
const folders = useFolders();
@@ -75,6 +76,8 @@ export function Sidebar({ className }: Props) {
namespace: NAMESPACE_NO_SYNC,
});
useHotkey('request.duplicate', () => duplicateRequest.mutate());
const isCollapsed = useCallback(
(id: string) => collapsed.value?.[id] ?? false,
[collapsed.value],
@@ -581,7 +584,6 @@ const SidebarItem = forwardRef(function SidebarItem(
const handleContextMenu = useCallback((e: React.MouseEvent<HTMLElement>) => {
e.preventDefault();
e.stopPropagation();
console.log('CONTEXT MENU');
setShowContextMenu({ x: e.clientX, y: e.clientY });
}, []);
@@ -647,7 +649,10 @@ const SidebarItem = forwardRef(function SidebarItem(
label: 'Duplicate',
hotkeyAction: 'request.duplicate',
leftSlot: <Icon icon="copy" />,
onSelect: () => duplicateRequest.mutate(),
onSelect: () => {
console.log('DUPLICATE');
duplicateRequest.mutate();
},
},
{
key: 'deleteRequest',

View File

@@ -8,9 +8,9 @@ interface Props {
}
export function HotKey({ action }: Props) {
const osinfo = useOsInfo();
const osInfo = useOsInfo();
const label = useFormattedHotkey(action);
if (label === null || osinfo == null) {
if (label === null || osInfo == null) {
return null;
}

View File

@@ -1,5 +1,6 @@
import type { OsType } from '@tauri-apps/api/os';
import { useEffect, useRef } from 'react';
import { debounce } from '../lib/debounce';
import { useOsInfo } from './useOsInfo';
export type HotkeyAction =
@@ -40,8 +41,12 @@ export function useAnyHotkey(callback: (action: HotkeyAction, e: KeyboardEvent)
}, [callback]);
useEffect(() => {
// Sometimes the keyup event doesn't fire, so we clear the keys after a timeout
const clearCurrentKeys = debounce(() => currentKeys.current.clear(), 1000);
const down = (e: KeyboardEvent) => {
currentKeys.current.add(normalizeKey(e.key, os));
for (const [hkAction, hkKeys] of Object.entries(hotkeys) as [HotkeyAction, string[]][]) {
for (const hkKey of hkKeys) {
const keys = hkKey.split('+');
@@ -56,6 +61,7 @@ export function useAnyHotkey(callback: (action: HotkeyAction, e: KeyboardEvent)
}
}
}
clearCurrentKeys();
};
const up = (e: KeyboardEvent) => {
currentKeys.current.delete(normalizeKey(e.key, os));