diff --git a/src/client/RunCodeWidget/index.tsx b/src/client/RunCodeWidget/index.tsx index 0bbb7ab0..71a9df1a 100644 --- a/src/client/RunCodeWidget/index.tsx +++ b/src/client/RunCodeWidget/index.tsx @@ -1,4 +1,4 @@ -import { useCallback, useContext, useState } from 'react'; +import { useCallback, useContext, useEffect, useState } from 'react'; import { PlaySVG } from '../Icons'; import { SplitEditorSVG } from '../Icons/SplitEditorSVG'; import { VZCodeContext } from '../VZCodeContext'; @@ -17,7 +17,7 @@ export const RunCodeWidget = ({ ), }: { - runCodeWidgetTooltipText?: JSX.Element; + runCodeWidgetTooltipText?: JSX.Element; }) => { const { runCodeRef, runPrettierRef, splitCurrentPane } = useContext(VZCodeContext); @@ -40,7 +40,7 @@ export const RunCodeWidget = ({ // Optional: reset the icon state after animation completes (e.g., 1 second) setTimeout(() => setIsRunning(false), 1000); - }, []); + }, [runCodeRef, runPrettierRef]); const handleSplitEditor = useCallback(() => { console.log('Split Editor'); @@ -48,6 +48,23 @@ export const RunCodeWidget = ({ splitCurrentPane(); }, [splitCurrentPane]); + // Add the keyboard event listener for Ctrl+S and Shift+Enter + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + if ((event.ctrlKey && event.key === 's') || (event.shiftKey && event.key === 'Enter')) { + event.preventDefault(); + handleClick(); + } + }; + + window.addEventListener('keydown', handleKeyDown); + + // Cleanup the event listener on component unmount + return () => { + window.removeEventListener('keydown', handleKeyDown); + }; + }, [handleClick]); + return (