Skip to content

Commit 310441b

Browse files
committed
temp [ci skip]
1 parent de8b9ee commit 310441b

6 files changed

Lines changed: 45 additions & 40 deletions

File tree

vscode/bus/src/callbacks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export type Callback = {
22
openFile: {
3-
path: string
3+
uri: string
44
}
55
queryRequest: {
66
requestId: string

vscode/extension/src/webviews/lineagePanel.ts

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CallbackEvent } from '@bus/callbacks'
1+
import { Callback, CallbackEvent } from '@bus/callbacks'
22
import {
33
Disposable,
44
Uri,
@@ -57,42 +57,24 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
5757
// Set content options for external URL access
5858
// Set up message listener for events from the iframe
5959
webviewView.webview.onDidReceiveMessage(
60-
async message => {
61-
if (!message) {
60+
async request => {
61+
console.log('received message', request)
62+
if (!request) {
6263
return
6364
}
64-
if (!message.key) {
65+
if (!request.key) {
6566
return
6667
}
68+
const message: CallbackEvent = request
6769
switch (message.key) {
68-
case 'vscode_callback': {
69-
const payload: CallbackEvent = message.payload
70-
// Handle callback events from the iframe
71-
switch (payload.key) {
72-
case 'openFile': {
73-
const workspaceFolders = getWorkspaceFolders()
74-
if (workspaceFolders.length != 1) {
75-
throw new Error('Only one workspace folder is supported')
76-
}
77-
const workspaceFolder = workspaceFolders[0]
78-
const fullPath = Uri.joinPath(
79-
workspaceFolder.uri,
80-
payload.payload.path,
81-
)
82-
const document = await workspace.openTextDocument(fullPath)
83-
await window.showTextDocument(document)
84-
break
85-
}
86-
case 'queryRequest': {
87-
throw new Error('queryRequest is not supported')
88-
}
89-
default: {
90-
console.error(
91-
'Unhandled message type under vscode_callback: ',
92-
message,
93-
)
94-
}
70+
case 'openFile': {
71+
const workspaceFolders = getWorkspaceFolders()
72+
if (workspaceFolders.length != 1) {
73+
throw new Error('Only one workspace folder is supported')
9574
}
75+
const fullPath = Uri.parse(message.payload.uri)
76+
const document = await workspace.openTextDocument(fullPath)
77+
await window.showTextDocument(document)
9678
break
9779
}
9880
case 'queryRequest': {
@@ -102,7 +84,7 @@ export class LineagePanel implements WebviewViewProvider, Disposable {
10284
'sqlmesh/api',
10385
payload,
10486
)
105-
webviewView.webview.postMessage({
87+
webviewView.webview.postMessage({
10688
key: 'query_response',
10789
payload: response,
10890
requestId,

vscode/react/src/domain/model.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ interface Model {
33
fqn: string
44
path: string
55
dialect: string
6+
full_path: string
67
// type: ModelType
78
// columns: Column[]
89
// default_catalog?: ModelDefaultCatalog

vscode/react/src/hooks/vscode.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,3 @@ import { sendVSCodeMessage } from '@/utils/vscodeapi'
77
* so we need to send messages to the parent window
88
*/
99
export const useVSCode = () => sendVSCodeMessage
10-

vscode/react/src/pages/lineage.tsx

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,24 @@ import { useApiModels } from '@/api'
88
import LineageFlowProvider from '@/components/graph/context'
99
import { ModelLineage } from '@/components/graph/ModelLineage'
1010
import { useVSCode } from '@/hooks/vscode'
11-
import React from 'react'
11+
import React, { useEffect, useState } from 'react'
1212
import { ModelSQLMeshModel } from '@/domain/sqlmesh-model'
13+
import { useEventBus } from '@/hooks/eventBus'
14+
import type { VSCodeEvent } from '@bus/callbacks'
15+
import { setTokenSourceMapRange } from 'typescript'
1316

1417
export function LineagePage() {
18+
const { emit } = useEventBus()
19+
1520
// Handle messages from VSCode extension
1621
React.useEffect(() => {
1722
const handleMessage = (event: MessageEvent) => {
1823
// Ensure the message is from VSCode
1924
if (event.data && event.data.key === 'vscode_send') {
20-
const payload = event.data.payload
25+
const payload: VSCodeEvent = event.data.payload
2126
switch (payload.key) {
2227
case 'changeFocusOnFile':
23-
console.log('Changing focus to file:', payload.payload.path)
28+
console.log('emitted focus to file:', payload.payload.path)
2429
emit('changeFocusedFile', { fileUri: payload.payload.path })
2530
break
2631
default:
@@ -57,8 +62,16 @@ export function LineagePage() {
5762
}
5863

5964
function Lineage() {
65+
const { on } = useEventBus()
66+
const [selectedModelSet, setSelectedModelSet] = useState<string | undefined>(undefined)
6067
const { data: models, isLoading: isLoadingModels } = useApiModels()
61-
if (isLoadingModels || models === undefined) {
68+
React.useEffect(() => {
69+
if (selectedModelSet === undefined && models && models.length > 0) {
70+
setSelectedModelSet(models[0].name)
71+
}
72+
}, [models, selectedModelSet])
73+
74+
if (isLoadingModels || models === undefined || selectedModelSet === undefined) {
6275
return <div>Loading models...</div>
6376
}
6477
if (!Array.isArray(models)) {
@@ -71,7 +84,15 @@ function Lineage() {
7184
},
7285
{} as Record<string, Model>,
7386
)
74-
const selectedModel = Object.keys(modelsRecord)[0]
87+
const selectedModel = selectedModelSet
88+
on('changeFocusedFile', (fileUri) => {
89+
console.log('on changeFocusedFile', fileUri)
90+
const full_path = fileUri.fileUri.startsWith("file://") ? fileUri.fileUri.substring(7) : fileUri.fileUri
91+
const model = Object.values(modelsRecord).find((m: Model) => m.full_path === full_path)
92+
if (model) {
93+
setSelectedModelSet(model.name)
94+
}
95+
})
7596

7697
return (
7798
<LineageComponentFromWeb
@@ -96,7 +117,7 @@ export function LineageComponentFromWeb({
96117
if (!model) {
97118
throw new Error('Model not found')
98119
}
99-
vscode('openFile', { path: model.path })
120+
vscode('openFile', { uri: "file://" + model.full_path })
100121
}
101122

102123
function handleError(error: any): void {

vscode/react/src/utils/vscodeapi.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ export const sendVSCodeMessage = <K extends keyof Callback> (
1414
payload: payload,
1515
}
1616
if (window !== window.parent) {
17+
console.log('sending message to parent', eventPayload)
1718
window.parent.postMessage(eventPayload, '*')
1819
} else {
20+
console.log('sending message to self', eventPayload)
1921
getVSCodeAPI().postMessage(eventPayload)
2022
}
2123
}

0 commit comments

Comments
 (0)