Skip to content

Commit c620939

Browse files
Merge pull request #2913 from github/robertbrignull/SaveModeledMethods
Remove method and modeledMethods from SaveModeledMethods message
2 parents e4a290f + c3e1891 commit c620939

File tree

6 files changed

+98
-64
lines changed

6 files changed

+98
-64
lines changed

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,8 +546,7 @@ interface RefreshMethods {
546546

547547
interface SaveModeledMethods {
548548
t: "saveModeledMethods";
549-
methods: Method[];
550-
modeledMethods: Record<string, ModeledMethod>;
549+
methodSignatures?: string[];
551550
}
552551

553552
interface GenerateMethodMessage {

extensions/ql-vscode/src/model-editor/model-editor-view.ts

Lines changed: 50 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -205,47 +205,58 @@ export class ModelEditorView extends AbstractWebview<
205205

206206
break;
207207
case "saveModeledMethods":
208-
await withProgress(
209-
async (progress) => {
210-
progress({
211-
step: 1,
212-
maxStep: 500 + externalApiQueriesProgressMaxStep,
213-
message: "Writing model files",
214-
});
215-
await saveModeledMethods(
216-
this.extensionPack,
217-
this.databaseItem.language,
218-
msg.methods,
219-
convertFromLegacyModeledMethods(msg.modeledMethods),
220-
this.mode,
221-
this.cliServer,
222-
this.app.logger,
223-
);
224-
225-
await Promise.all([
226-
this.setViewState(),
227-
this.loadMethods((update) =>
228-
progress({
229-
...update,
230-
step: update.step + 500,
231-
maxStep: 500 + externalApiQueriesProgressMaxStep,
232-
}),
233-
),
234-
]);
235-
},
236-
{
237-
cancellable: false,
238-
},
239-
);
208+
{
209+
const methods = this.modelingStore.getMethods(
210+
this.databaseItem,
211+
msg.methodSignatures,
212+
);
213+
const modeledMethods = this.modelingStore.getModeledMethods(
214+
this.databaseItem,
215+
msg.methodSignatures,
216+
);
240217

241-
this.modelingStore.removeModifiedMethods(
242-
this.databaseItem,
243-
Object.keys(msg.modeledMethods),
244-
);
218+
await withProgress(
219+
async (progress) => {
220+
progress({
221+
step: 1,
222+
maxStep: 500 + externalApiQueriesProgressMaxStep,
223+
message: "Writing model files",
224+
});
225+
await saveModeledMethods(
226+
this.extensionPack,
227+
this.databaseItem.language,
228+
methods,
229+
convertFromLegacyModeledMethods(modeledMethods),
230+
this.mode,
231+
this.cliServer,
232+
this.app.logger,
233+
);
234+
235+
await Promise.all([
236+
this.setViewState(),
237+
this.loadMethods((update) =>
238+
progress({
239+
...update,
240+
step: update.step + 500,
241+
maxStep: 500 + externalApiQueriesProgressMaxStep,
242+
}),
243+
),
244+
]);
245+
},
246+
{
247+
cancellable: false,
248+
},
249+
);
245250

246-
void telemetryListener?.sendUIInteraction(
247-
"model-editor-save-modeled-methods",
248-
);
251+
this.modelingStore.removeModifiedMethods(
252+
this.databaseItem,
253+
Object.keys(modeledMethods),
254+
);
255+
256+
void telemetryListener?.sendUIInteraction(
257+
"model-editor-save-modeled-methods",
258+
);
259+
}
249260

250261
break;
251262
case "generateMethod":

extensions/ql-vscode/src/model-editor/modeling-store.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,23 @@ export class ModelingStore extends DisposableObject {
169169
return this.state.size > 0;
170170
}
171171

172+
/**
173+
* Returns the methods for the given database item and method signatures.
174+
* If the `methodSignatures` argument is not provided or is undefined, returns all methods.
175+
*/
176+
public getMethods(
177+
dbItem: DatabaseItem,
178+
methodSignatures?: string[],
179+
): Method[] {
180+
const methods = this.getState(dbItem).methods;
181+
if (!methodSignatures) {
182+
return methods;
183+
}
184+
return methods.filter((method) =>
185+
methodSignatures.includes(method.signature),
186+
);
187+
}
188+
172189
public setMethods(dbItem: DatabaseItem, methods: Method[]) {
173190
const dbState = this.getState(dbItem);
174191
const dbUri = dbItem.databaseUri.toString();
@@ -197,6 +214,25 @@ export class ModelingStore extends DisposableObject {
197214
});
198215
}
199216

217+
/**
218+
* Returns the modeled methods for the given database item and method signatures.
219+
* If the `methodSignatures` argument is not provided or is undefined, returns all modeled methods.
220+
*/
221+
public getModeledMethods(
222+
dbItem: DatabaseItem,
223+
methodSignatures?: string[],
224+
): Record<string, ModeledMethod> {
225+
const modeledMethods = this.getState(dbItem).modeledMethods;
226+
if (!methodSignatures) {
227+
return modeledMethods;
228+
}
229+
return Object.fromEntries(
230+
Object.entries(modeledMethods).filter(([key]) =>
231+
methodSignatures.includes(key),
232+
),
233+
);
234+
}
235+
200236
public addModeledMethods(
201237
dbItem: DatabaseItem,
202238
methods: Record<string, ModeledMethod>,

extensions/ql-vscode/src/view/model-editor/LibraryRow.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,7 @@ export type LibraryRowProps = {
7878
hideModeledMethods: boolean;
7979
revealedMethodSignature: string | null;
8080
onChange: (modeledMethod: ModeledMethod) => void;
81-
onSaveModelClick: (
82-
methods: Method[],
83-
modeledMethods: Record<string, ModeledMethod>,
84-
) => void;
81+
onSaveModelClick: (methodSignatures: string[]) => void;
8582
onGenerateFromLlmClick: (
8683
dependencyName: string,
8784
methods: Method[],
@@ -165,11 +162,11 @@ export const LibraryRow = ({
165162

166163
const handleSave = useCallback(
167164
async (e: React.MouseEvent) => {
168-
onSaveModelClick(methods, modeledMethods);
165+
onSaveModelClick(methods.map((m) => m.signature));
169166
e.stopPropagation();
170167
e.preventDefault();
171168
},
172-
[methods, modeledMethods, onSaveModelClick],
169+
[methods, onSaveModelClick],
173170
);
174171

175172
const hasUnsavedChanges = useMemo(() => {

extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -196,21 +196,15 @@ export function ModelEditor({
196196
const onSaveAllClick = useCallback(() => {
197197
vscode.postMessage({
198198
t: "saveModeledMethods",
199-
methods,
200-
modeledMethods,
201199
});
202-
}, [methods, modeledMethods]);
200+
}, []);
203201

204-
const onSaveModelClick = useCallback(
205-
(methods: Method[], modeledMethods: Record<string, ModeledMethod>) => {
206-
vscode.postMessage({
207-
t: "saveModeledMethods",
208-
methods,
209-
modeledMethods,
210-
});
211-
},
212-
[],
213-
);
202+
const onSaveModelClick = useCallback((methodSignatures: string[]) => {
203+
vscode.postMessage({
204+
t: "saveModeledMethods",
205+
methodSignatures,
206+
});
207+
}, []);
214208

215209
const onGenerateFromSourceClick = useCallback(() => {
216210
vscode.postMessage({

extensions/ql-vscode/src/view/model-editor/ModeledMethodsList.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ export type ModeledMethodsListProps = {
2020
viewState: ModelEditorViewState;
2121
hideModeledMethods: boolean;
2222
onChange: (modeledMethod: ModeledMethod) => void;
23-
onSaveModelClick: (
24-
methods: Method[],
25-
modeledMethods: Record<string, ModeledMethod>,
26-
) => void;
23+
onSaveModelClick: (methodSignatures: string[]) => void;
2724
onGenerateFromLlmClick: (
2825
packageName: string,
2926
methods: Method[],

0 commit comments

Comments
 (0)