@@ -9,6 +9,7 @@ import { App } from "../../common/app";
99import { redactableError } from "../../common/errors" ;
1010import { Method } from "../method" ;
1111import { DisposableObject } from "../../common/disposable-object" ;
12+ import { ModelingStore } from "../modeling-store" ;
1213
1314export class MethodModelingViewProvider
1415 extends DisposableObject
@@ -18,7 +19,12 @@ export class MethodModelingViewProvider
1819
1920 private webviewView : vscode . WebviewView | undefined = undefined ;
2021
21- constructor ( private readonly app : App ) {
22+ private method : Method | undefined = undefined ;
23+
24+ constructor (
25+ private readonly app : App ,
26+ private readonly modelingStore : ModelingStore ,
27+ ) {
2228 super ( ) ;
2329 }
2430
@@ -51,9 +57,13 @@ export class MethodModelingViewProvider
5157 webviewView . webview . onDidReceiveMessage ( async ( msg ) => this . onMessage ( msg ) ) ;
5258
5359 this . webviewView = webviewView ;
60+
61+ this . registerToModelingStoreEvents ( ) ;
5462 }
5563
5664 public async setMethod ( method : Method ) : Promise < void > {
65+ this . method = method ;
66+
5767 if ( this . webviewView ) {
5868 await this . webviewView . webview . postMessage ( {
5969 t : "setMethod" ,
@@ -64,6 +74,18 @@ export class MethodModelingViewProvider
6474
6575 private async onMessage ( msg : FromMethodModelingMessage ) : Promise < void > {
6676 switch ( msg . t ) {
77+ case "setModeledMethod" : {
78+ const activeState = this . modelingStore . getStateForActiveDb ( ) ;
79+ if ( ! activeState ) {
80+ throw new Error ( "No active state found in modeling store" ) ;
81+ }
82+ this . modelingStore . updateModeledMethod (
83+ activeState . databaseItem ,
84+ msg . method ,
85+ ) ;
86+ break ;
87+ }
88+
6789 case "telemetry" : {
6890 telemetryListener ?. sendUIInteraction ( msg . action ) ;
6991 break ;
@@ -79,4 +101,40 @@ export class MethodModelingViewProvider
79101 break ;
80102 }
81103 }
104+
105+ private registerToModelingStoreEvents ( ) : void {
106+ this . modelingStore . onModeledMethodsChanged ( async ( e ) => {
107+ if ( this . webviewView && e . isActiveDb ) {
108+ const modeledMethod = e . modeledMethods [ this . method ?. signature ?? "" ] ;
109+ if ( modeledMethod ) {
110+ await this . webviewView . webview . postMessage ( {
111+ t : "setModeledMethod" ,
112+ method : modeledMethod ,
113+ } ) ;
114+ }
115+ }
116+ } ) ;
117+
118+ this . modelingStore . onModifiedMethodsChanged ( async ( e ) => {
119+ if ( this . webviewView && e . isActiveDb && this . method ) {
120+ const isModified = e . modifiedMethods . has ( this . method . signature ) ;
121+ await this . webviewView . webview . postMessage ( {
122+ t : "setMethodModified" ,
123+ isModified,
124+ } ) ;
125+ }
126+ } ) ;
127+
128+ this . modelingStore . onSelectedMethodChanged ( async ( e ) => {
129+ if ( this . webviewView ) {
130+ this . method = e . method ;
131+ await this . webviewView . webview . postMessage ( {
132+ t : "setSelectedMethod" ,
133+ method : e . method ,
134+ modeledMethod : e . modeledMethod ,
135+ isModified : e . isModified ,
136+ } ) ;
137+ }
138+ } ) ;
139+ }
82140}
0 commit comments