File tree Expand file tree Collapse file tree 6 files changed +37
-10
lines changed
gpt-runner-web/client/src/hooks Expand file tree Collapse file tree 6 files changed +37
-10
lines changed Original file line number Diff line number Diff line change @@ -7,7 +7,7 @@ import { getExtConfiguration } from './utils'
7
7
import { Commands , EXT_DISPLAY_NAME } from './constant'
8
8
import { registerWebview } from './register/webview'
9
9
import { registerServer } from './register/server'
10
- import { registerInsertCodes } from './register/inser -codes'
10
+ import { registerInsertCodes } from './register/insert -codes'
11
11
import { registerDiffCodes } from './register/diff-codes'
12
12
import { registerOpenInBrowser } from './register/open-in-browser'
13
13
import { registerStatusBar } from './register/status-bar'
Original file line number Diff line number Diff line change @@ -86,7 +86,15 @@ export async function registerDiffCodes(
86
86
87
87
diffCodesProviderDisposable = DiffCodesProvider . getInstance ( ) . registerTextDocumentContentProvider ( )
88
88
89
- commandDisposable = vscode . commands . registerTextEditorCommand ( Commands . DiffCodes , async ( editor ) => {
89
+ commandDisposable = vscode . commands . registerCommand ( Commands . DiffCodes , async ( ) => {
90
+ if ( vscode . window . activeTextEditor )
91
+ state . activeEditor = vscode . window . activeTextEditor
92
+
93
+ const editor = state . activeEditor
94
+
95
+ if ( ! editor )
96
+ return
97
+
90
98
const title = 'Your codes ↔ GPT Runner codes'
91
99
const selectionText = editor . document . getText ( editor . selection )
92
100
Original file line number Diff line number Diff line change @@ -18,11 +18,20 @@ export async function registerInsertCodes(
18
18
const registerProvider = ( ) => {
19
19
dispose ( )
20
20
21
- disposable = vscode . commands . registerTextEditorCommand ( Commands . InsertCodes , ( editor , edit ) => {
22
- editor . selections . forEach ( ( selection ) => {
23
- const text = state . insertCodes
24
- edit . replace ( selection , text ) // insert at current cursor
25
- } )
21
+ disposable = vscode . commands . registerCommand ( Commands . InsertCodes , ( ) => {
22
+ if ( vscode . window . activeTextEditor )
23
+ state . activeEditor = vscode . window . activeTextEditor
24
+
25
+ const editor = state . activeEditor
26
+
27
+ if ( editor ) {
28
+ editor . selections . forEach ( ( selection ) => {
29
+ const text = state . insertCodes
30
+ editor . edit ( ( edit ) => {
31
+ edit . replace ( selection , text ) // insert at current cursor
32
+ } )
33
+ } )
34
+ }
26
35
} )
27
36
28
37
return disposable
Original file line number Diff line number Diff line change @@ -42,6 +42,7 @@ class ChatViewProvider implements vscode.WebviewViewProvider {
42
42
EXT_DISPLAY_NAME ,
43
43
{
44
44
viewColumn : vscode . ViewColumn . Two ,
45
+ preserveFocus : true ,
45
46
} ,
46
47
{ retainContextWhenHidden : true } ,
47
48
)
@@ -142,6 +143,9 @@ export async function registerWebview(
142
143
143
144
sidebarWebviewDisposer = vscode . window . registerWebviewViewProvider ( ChatViewProvider . viewType , provider )
144
145
webviewPanelDisposer = vscode . commands . registerCommand ( Commands . OpenChat , ( ) => {
146
+ if ( vscode . window . activeTextEditor )
147
+ state . activeEditor = vscode . window . activeTextEditor
148
+
145
149
ChatViewProvider . createWebviewPanel ( ext , cwd )
146
150
} )
147
151
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ export interface State {
5
5
statusBarItem : vscode . StatusBarItem | null
6
6
sidebarWebviewView : vscode . WebviewView | null
7
7
webviewPanel : vscode . WebviewPanel | null
8
+ activeEditor : vscode . TextEditor | null
8
9
insertCodes : string
9
10
diffCodes : string
10
11
}
@@ -14,6 +15,7 @@ export const state: State = {
14
15
statusBarItem : null ,
15
16
sidebarWebviewView : null ,
16
17
webviewPanel : null ,
18
+ activeEditor : null ,
17
19
insertCodes : '' ,
18
20
diffCodes : 'aaa' ,
19
21
}
Original file line number Diff line number Diff line change 1
- import { useEffect , useRef , useState } from 'react'
1
+ import { useLayoutEffect , useRef , useState } from 'react'
2
2
3
3
interface Size {
4
4
width : number
@@ -17,13 +17,12 @@ export function useSize(props?: UseSizeProps): [ref: React.RefObject<HTMLElement
17
17
const ref = props ?. ref ?? useRef < HTMLElement > ( null )
18
18
const [ size , setSize ] = useState < Size > ( { width, height } )
19
19
20
- useEffect ( ( ) => {
20
+ useLayoutEffect ( ( ) => {
21
21
if ( ! ref . current )
22
22
return
23
23
24
24
const updateSize = ( ) => {
25
25
if ( ref . current ) {
26
- console . log ( 'updateSize' , ref . current . offsetWidth , ref . current . offsetHeight )
27
26
setSize ( {
28
27
width : ref . current . offsetWidth ,
29
28
height : ref . current . offsetHeight ,
@@ -35,8 +34,13 @@ export function useSize(props?: UseSizeProps): [ref: React.RefObject<HTMLElement
35
34
36
35
ref . current . addEventListener ( 'resize' , updateSize )
37
36
37
+ // ResizeObserver
38
+ const resizeObserver = new ResizeObserver ( updateSize )
39
+ resizeObserver . observe ( ref . current )
40
+
38
41
return ( ) => {
39
42
ref . current ?. removeEventListener ( 'resize' , updateSize )
43
+ resizeObserver . disconnect ( )
40
44
}
41
45
} , [ ref . current ] )
42
46
You can’t perform that action at this time.
0 commit comments