@@ -8,6 +8,10 @@ import { useCallback, useEffect, useRef, useState } from "react";
8
8
import { SymbolDefinition , useHoveredOverSymbolInfo } from "./useHoveredOverSymbolInfo" ;
9
9
import { SymbolDefinitionPreview } from "./symbolDefinitionPreview" ;
10
10
import { createPortal } from "react-dom" ;
11
+ import { useHotkeys } from "react-hotkeys-hook" ;
12
+ import { useToast } from "@/components/hooks/use-toast" ;
13
+ import { Tooltip , TooltipContent , TooltipTrigger } from "@/components/ui/tooltip" ;
14
+ import { KeyboardShortcutHint } from "@/app/components/keyboardShortcutHint" ;
11
15
12
16
interface SymbolHoverPopupProps {
13
17
editorRef : ReactCodeMirrorRef ;
@@ -26,6 +30,7 @@ export const SymbolHoverPopup: React.FC<SymbolHoverPopupProps> = ({
26
30
} ) => {
27
31
const ref = useRef < HTMLDivElement > ( null ) ;
28
32
const [ isSticky , setIsSticky ] = useState ( false ) ;
33
+ const { toast } = useToast ( ) ;
29
34
30
35
const symbolInfo = useHoveredOverSymbolInfo ( {
31
36
editorRef,
@@ -94,6 +99,36 @@ export const SymbolHoverPopup: React.FC<SymbolHoverPopupProps> = ({
94
99
}
95
100
} , [ symbolInfo , onGotoDefinition ] ) ;
96
101
102
+ useHotkeys ( 'alt+shift+f12' , ( ) => {
103
+ if ( symbolInfo ?. symbolName ) {
104
+ console . log ( 'here!' ) ;
105
+ onFindReferences ( symbolInfo . symbolName ) ;
106
+ }
107
+ } , {
108
+ enableOnFormTags : true ,
109
+ enableOnContentEditable : true ,
110
+ description : "Open Explore Panel" ,
111
+ } ) ;
112
+
113
+ useHotkeys ( 'alt+f12' , ( ) => {
114
+ if ( ! symbolInfo ) {
115
+ return ;
116
+ }
117
+
118
+ if ( ! symbolInfo . symbolDefinitions || symbolInfo . symbolDefinitions . length === 0 ) {
119
+ toast ( {
120
+ description : "No definition found for this symbol" ,
121
+ } ) ;
122
+ return ;
123
+ }
124
+
125
+ onGotoDefinition ( ) ;
126
+ } , {
127
+ enableOnFormTags : true ,
128
+ enableOnContentEditable : true ,
129
+ description : "Go to definition" ,
130
+ } )
131
+
97
132
if ( ! symbolInfo ) {
98
133
return null ;
99
134
}
@@ -122,26 +157,50 @@ export const SymbolHoverPopup: React.FC<SymbolHoverPopupProps> = ({
122
157
) }
123
158
< Separator />
124
159
< div className = "flex flex-row gap-2 mt-2" >
125
- < LoadingButton
126
- loading = { symbolInfo . isSymbolDefinitionsLoading }
127
- disabled = { ! symbolInfo . symbolDefinitions || symbolInfo . symbolDefinitions . length === 0 }
128
- variant = "outline"
129
- size = "sm"
130
- onClick = { onGotoDefinition }
131
- >
132
- {
133
- ! symbolInfo . isSymbolDefinitionsLoading && ( ! symbolInfo . symbolDefinitions || symbolInfo . symbolDefinitions . length === 0 ) ?
134
- "No definition found" :
135
- `Go to ${ symbolInfo . symbolDefinitions && symbolInfo . symbolDefinitions . length > 1 ? "definitions" : "definition" } `
136
- }
137
- </ LoadingButton >
138
- < Button
139
- variant = "outline"
140
- size = "sm"
141
- onClick = { ( ) => onFindReferences ( symbolInfo . symbolName ) }
142
- >
143
- Find references
144
- </ Button >
160
+ < Tooltip delayDuration = { 500 } >
161
+ < TooltipTrigger asChild >
162
+ < LoadingButton
163
+ loading = { symbolInfo . isSymbolDefinitionsLoading }
164
+ disabled = { ! symbolInfo . symbolDefinitions || symbolInfo . symbolDefinitions . length === 0 }
165
+ variant = "outline"
166
+ size = "sm"
167
+ onClick = { onGotoDefinition }
168
+ >
169
+ {
170
+ ! symbolInfo . isSymbolDefinitionsLoading && ( ! symbolInfo . symbolDefinitions || symbolInfo . symbolDefinitions . length === 0 ) ?
171
+ "No definition found" :
172
+ `Go to ${ symbolInfo . symbolDefinitions && symbolInfo . symbolDefinitions . length > 1 ? "definitions" : "definition" } `
173
+ }
174
+ </ LoadingButton >
175
+ </ TooltipTrigger >
176
+ < TooltipContent
177
+ side = "bottom"
178
+ className = "flex flex-row items-center gap-2"
179
+ >
180
+ < KeyboardShortcutHint shortcut = "⌥ F12" />
181
+ < Separator orientation = "vertical" className = "h-4" />
182
+ < span > { `Go to ${ symbolInfo . symbolDefinitions && symbolInfo . symbolDefinitions . length > 1 ? "definitions" : "definition" } ` } </ span >
183
+ </ TooltipContent >
184
+ </ Tooltip >
185
+ < Tooltip delayDuration = { 500 } >
186
+ < TooltipTrigger asChild >
187
+ < Button
188
+ variant = "outline"
189
+ size = "sm"
190
+ onClick = { ( ) => onFindReferences ( symbolInfo . symbolName ) }
191
+ >
192
+ Find references
193
+ </ Button >
194
+ </ TooltipTrigger >
195
+ < TooltipContent
196
+ side = "bottom"
197
+ className = "flex flex-row items-center gap-2"
198
+ >
199
+ < KeyboardShortcutHint shortcut = "⌥ ⇧ F12" />
200
+ < Separator orientation = "vertical" className = "h-4" />
201
+ < span > Find references</ span >
202
+ </ TooltipContent >
203
+ </ Tooltip >
145
204
</ div >
146
205
</ div > ,
147
206
document . body
0 commit comments