@@ -8,19 +8,24 @@ import { useApiModels } from '@/api'
88import LineageFlowProvider from '@/components/graph/context'
99import { ModelLineage } from '@/components/graph/ModelLineage'
1010import { useVSCode } from '@/hooks/vscode'
11- import React from 'react'
11+ import React , { useEffect , useState } from 'react'
1212import { ModelSQLMeshModel } from '@/domain/sqlmesh-model'
13+ import { useEventBus } from '@/hooks/eventBus'
14+ import type { VSCodeEvent } from '@bus/callbacks'
15+ import { setTokenSourceMapRange } from 'typescript'
1316
1417export 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
5964function 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 {
0 commit comments