1- import { useCallback , useEffect , useRef } from 'react' ;
1+ import { useCallback , useEffect , useMemo , useRef } from 'react' ;
22import { useController , UseControllerProps } from 'react-hook-form' ;
33import { acceptCompletion } from '@codemirror/autocomplete' ;
44import { TableConnection } from '@hyperdx/common-utils/dist/core/metadata' ;
@@ -7,6 +7,7 @@ import CodeMirror, {
77 Compartment ,
88 EditorView ,
99 keymap ,
10+ Prec ,
1011 ReactCodeMirrorRef ,
1112} from '@uiw/react-codemirror' ;
1213
@@ -30,8 +31,17 @@ type SQLEditorProps = {
3031 additionalCompletions ?: SQLCompletion [ ] ;
3132 dateRange ?: [ Date , Date ] ;
3233 timestampValueExpression ?: string ;
34+ onSubmit ?: ( ) => void ;
3335} ;
3436
37+ export const createRunQueryKeyBinding = ( onSubmit : ( ) => void ) => ( {
38+ key : 'Mod-Enter' ,
39+ run : ( ) => {
40+ onSubmit ( ) ;
41+ return true ;
42+ } ,
43+ } ) ;
44+
3545export default function SQLEditor ( {
3646 onChange,
3747 placeholder,
@@ -42,11 +52,20 @@ export default function SQLEditor({
4252 additionalCompletions,
4353 dateRange,
4454 timestampValueExpression,
55+ onSubmit,
4556} : SQLEditorProps ) {
4657 const { colorScheme } = useMantineColorScheme ( ) ;
4758 const ref = useRef < ReactCodeMirrorRef > ( null ) ;
4859 const compartmentRef = useRef < Compartment > ( new Compartment ( ) ) ;
4960
61+ const runQueryKeymap = useMemo (
62+ ( ) =>
63+ onSubmit == null
64+ ? [ ]
65+ : [ Prec . highest ( keymap . of ( [ createRunQueryKeyBinding ( onSubmit ) ] ) ) ] ,
66+ [ onSubmit ] ,
67+ ) ;
68+
5069 const { data : fields } = useMultipleAllFields ( tableConnections ?? [ ] , {
5170 dateRange,
5271 timestampValueExpression,
@@ -111,6 +130,7 @@ export default function SQLEditor({
111130 upperCaseKeywords : true ,
112131 } ) ,
113132 ) ,
133+ ...runQueryKeymap ,
114134 keymap . of ( [
115135 {
116136 key : 'Tab' ,
0 commit comments