Skip to content

Commit f7239b0

Browse files
Include in addModeledMethods whether the methods are unsaved or not
1 parent bf0032d commit f7239b0

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,11 @@ export interface ShowProgressMessage {
512512
export interface AddModeledMethodsMessage {
513513
t: "addModeledMethods";
514514
modeledMethods: Record<string, ModeledMethod>;
515-
515+
/**
516+
* Are these modeled methods newly generated in some way and not yet
517+
* saved in any model file, or are they loaded from an existing model file.
518+
*/
519+
unsaved: boolean;
516520
/**
517521
* If true, then any existing modeled methods set to "none" will be
518522
* overwritten by the new modeled methods. Otherwise, the "none" modeled

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
259259
await this.postMessage({
260260
t: "addModeledMethods",
261261
modeledMethods: existingModeledMethods,
262+
unsaved: false,
262263
});
263264
} catch (e: unknown) {
264265
void showAndLogErrorMessage(
@@ -387,6 +388,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
387388
await this.postMessage({
388389
t: "addModeledMethods",
389390
modeledMethods: modeledMethodsByName,
391+
unsaved: true,
390392
overrideNone: true,
391393
});
392394
},
@@ -481,6 +483,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
481483
await this.postMessage({
482484
t: "addModeledMethods",
483485
modeledMethods: predictedModeledMethods,
486+
unsaved: true,
484487
overrideNone: true,
485488
});
486489

extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { DataExtensionEditorViewState } from "../../data-extensions-editor/share
1717
import { ModeledMethodsList } from "./ModeledMethodsList";
1818
import { percentFormatter } from "./formatters";
1919
import { Mode } from "../../data-extensions-editor/shared/mode";
20+
import { groupMethods } from "../../data-extensions-editor/shared/sorting";
2021

2122
const DataExtensionsEditorContainer = styled.div`
2223
margin-top: 1rem;
@@ -107,6 +108,23 @@ export function DataExtensionsEditor({
107108
...filteredOldModeledMethods,
108109
};
109110
});
111+
if (msg.unsaved) {
112+
const affectedExternalApiUsages =
113+
externalApiUsagesForModeledMethods(
114+
msg.modeledMethods,
115+
externalApiUsages,
116+
);
117+
const affectedModelNames = Object.keys(
118+
groupMethods(
119+
affectedExternalApiUsages,
120+
viewState?.mode ?? Mode.Application,
121+
),
122+
);
123+
setUnsavedModels(
124+
(oldUnsavedModels) =>
125+
new Set([...oldUnsavedModels, ...affectedModelNames]),
126+
);
127+
}
110128
break;
111129
default:
112130
assertNever(msg);
@@ -122,7 +140,7 @@ export function DataExtensionsEditor({
122140
return () => {
123141
window.removeEventListener("message", listener);
124142
};
125-
}, []);
143+
}, [externalApiUsages, viewState?.mode]);
126144

127145
const modeledPercentage = useMemo(
128146
() => calculateModeledPercentage(externalApiUsages),
@@ -308,3 +326,13 @@ export function DataExtensionsEditor({
308326
</DataExtensionsEditorContainer>
309327
);
310328
}
329+
330+
function externalApiUsagesForModeledMethods(
331+
modeledMethods: Record<string, ModeledMethod>,
332+
externalApiUsages: ExternalApiUsage[],
333+
): ExternalApiUsage[] {
334+
const signatures = new Set(Object.keys(modeledMethods));
335+
return externalApiUsages.filter((externalApiUsage) =>
336+
signatures.has(externalApiUsage.signature),
337+
);
338+
}

0 commit comments

Comments
 (0)