Skip to content

Commit

Permalink
add listener to better handle hotkey presses (chaiNNer-org#2114)
Browse files Browse the repository at this point in the history
  • Loading branch information
stonerl authored Aug 22, 2023
1 parent 64136a2 commit fd78e19
Showing 1 changed file with 48 additions and 51 deletions.
99 changes: 48 additions & 51 deletions src/renderer/contexts/ExecutionContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import {
} from '../hooks/useBackendEventSource';
import { useBackendExecutionOptions } from '../hooks/useBackendExecutionOptions';
import { useBatchedCallback } from '../hooks/useBatchedCallback';
import { useHotkeys } from '../hooks/useHotkeys';
import { useMemoObject } from '../hooks/useMemo';
import { AlertBoxContext, AlertType } from './AlertBoxContext';
import { BackendContext } from './BackendContext';
Expand Down Expand Up @@ -389,59 +388,57 @@ export const ExecutionProvider = memo(({ children }: React.PropsWithChildren<{}>
setIteratorProgress({});
}, [backend, restart, sendAlert]);

useHotkeys(
'F5',
useCallback(() => {
switch (status) {
case ExecutionStatus.READY:
case ExecutionStatus.PAUSED:
// eslint-disable-next-line @typescript-eslint/no-floating-promises
run();
break;
case ExecutionStatus.RUNNING:
case ExecutionStatus.KILLING:
break;
default:
assertNever(status);
// This makes sure keystrokes are executed even if the focus is on an input field
useEffect(() => {
const handleKeyPress = (event: KeyboardEvent) => {
if (event.code === 'F5') {
switch (status) {
case ExecutionStatus.READY:
case ExecutionStatus.PAUSED:
event.preventDefault();
run().catch(log.error);
break;
case ExecutionStatus.RUNNING:
case ExecutionStatus.KILLING:
break;
default:
assertNever(status);
}
} else if (event.code === 'F6') {
switch (status) {
case ExecutionStatus.RUNNING:
event.preventDefault();
pause().catch(log.error);
break;
case ExecutionStatus.READY:
case ExecutionStatus.PAUSED:
case ExecutionStatus.KILLING:
break;
default:
assertNever(status);
}
} else if (event.code === 'F7') {
switch (status) {
case ExecutionStatus.RUNNING:
case ExecutionStatus.PAUSED:
event.preventDefault();
kill().catch(log.error);
break;
case ExecutionStatus.READY:
case ExecutionStatus.KILLING:
break;
default:
assertNever(status);
}
}
}, [run, status])
);
};

useHotkeys(
'F6',
useCallback(() => {
switch (status) {
case ExecutionStatus.RUNNING:
// eslint-disable-next-line @typescript-eslint/no-floating-promises
pause();
break;
case ExecutionStatus.READY:
case ExecutionStatus.PAUSED:
case ExecutionStatus.KILLING:
break;
default:
assertNever(status);
}
}, [pause, status])
);
document.addEventListener('keydown', handleKeyPress);

useHotkeys(
'F7',
useCallback(() => {
switch (status) {
case ExecutionStatus.RUNNING:
case ExecutionStatus.PAUSED:
// eslint-disable-next-line @typescript-eslint/no-floating-promises
kill();
break;
case ExecutionStatus.READY:
case ExecutionStatus.KILLING:
break;
default:
assertNever(status);
}
}, [kill, status])
);
return () => {
document.removeEventListener('keydown', handleKeyPress);
};
}, [run, pause, kill, status]);

const statusValue = useMemoObject<ExecutionStatusContextValue>({
status,
Expand Down

0 comments on commit fd78e19

Please sign in to comment.