Skip to content

Commit aa4df08

Browse files
Merge pull request #2594 from github/robertbrignull/data-unsaved-changes
Include in addModeledMethods whether the methods are unsaved or not
2 parents 6cf2f32 + 370872d commit aa4df08

File tree

3 files changed

+45
-21
lines changed

3 files changed

+45
-21
lines changed

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -509,17 +509,14 @@ export interface ShowProgressMessage {
509509
message: string;
510510
}
511511

512+
export interface LoadModeledMethodsMessage {
513+
t: "loadModeledMethods";
514+
modeledMethods: Record<string, ModeledMethod>;
515+
}
516+
512517
export interface AddModeledMethodsMessage {
513518
t: "addModeledMethods";
514519
modeledMethods: Record<string, ModeledMethod>;
515-
516-
/**
517-
* If true, then any existing modeled methods set to "none" will be
518-
* overwritten by the new modeled methods. Otherwise, the "none" modeled
519-
* methods will not be overwritten, even if the new modeled methods
520-
* contain a better model.
521-
*/
522-
overrideNone?: boolean;
523520
}
524521

525522
export interface SwitchModeMessage {
@@ -560,6 +557,7 @@ export type ToDataExtensionsEditorMessage =
560557
| SetExtensionPackStateMessage
561558
| SetExternalApiUsagesMessage
562559
| ShowProgressMessage
560+
| LoadModeledMethodsMessage
563561
| AddModeledMethodsMessage;
564562

565563
export type FromDataExtensionsEditorMessage =

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
257257
}
258258

259259
await this.postMessage({
260-
t: "addModeledMethods",
260+
t: "loadModeledMethods",
261261
modeledMethods: existingModeledMethods,
262262
});
263263
} catch (e: unknown) {
@@ -387,7 +387,6 @@ export class DataExtensionsEditorView extends AbstractWebview<
387387
await this.postMessage({
388388
t: "addModeledMethods",
389389
modeledMethods: modeledMethodsByName,
390-
overrideNone: true,
391390
});
392391
},
393392
progress: (update) => this.showProgress(update),
@@ -481,7 +480,6 @@ export class DataExtensionsEditorView extends AbstractWebview<
481480
await this.postMessage({
482481
t: "addModeledMethods",
483482
modeledMethods: predictedModeledMethods,
484-
overrideNone: true,
485483
});
486484

487485
await this.clearProgress();

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

Lines changed: 38 additions & 10 deletions
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;
@@ -92,21 +93,36 @@ export function DataExtensionsEditor({
9293
case "showProgress":
9394
setProgress(msg);
9495
break;
96+
case "loadModeledMethods":
97+
setModeledMethods((oldModeledMethods) => {
98+
return {
99+
...msg.modeledMethods,
100+
...oldModeledMethods,
101+
};
102+
});
103+
break;
95104
case "addModeledMethods":
96105
setModeledMethods((oldModeledMethods) => {
97-
const filteredOldModeledMethods = msg.overrideNone
98-
? Object.fromEntries(
99-
Object.entries(oldModeledMethods).filter(
100-
([, value]) => value.type !== "none",
101-
),
102-
)
103-
: oldModeledMethods;
104-
105106
return {
106107
...msg.modeledMethods,
107-
...filteredOldModeledMethods,
108+
...Object.fromEntries(
109+
Object.entries(oldModeledMethods).filter(
110+
([, value]) => value.type !== "none",
111+
),
112+
),
108113
};
109114
});
115+
setUnsavedModels(
116+
(oldUnsavedModels) =>
117+
new Set([
118+
...oldUnsavedModels,
119+
...modelsAffectedByNewModeledMethods(
120+
msg.modeledMethods,
121+
externalApiUsages,
122+
viewState?.mode ?? Mode.Application,
123+
),
124+
]),
125+
);
110126
break;
111127
default:
112128
assertNever(msg);
@@ -122,7 +138,7 @@ export function DataExtensionsEditor({
122138
return () => {
123139
window.removeEventListener("message", listener);
124140
};
125-
}, []);
141+
}, [externalApiUsages, viewState?.mode]);
126142

127143
const modeledPercentage = useMemo(
128144
() => calculateModeledPercentage(externalApiUsages),
@@ -309,3 +325,15 @@ export function DataExtensionsEditor({
309325
</DataExtensionsEditorContainer>
310326
);
311327
}
328+
329+
function modelsAffectedByNewModeledMethods(
330+
modeledMethods: Record<string, ModeledMethod>,
331+
externalApiUsages: ExternalApiUsage[],
332+
mode: Mode,
333+
): string[] {
334+
const signatures = new Set(Object.keys(modeledMethods));
335+
const affectedExternalApiUsages = externalApiUsages.filter(
336+
(externalApiUsage) => signatures.has(externalApiUsage.signature),
337+
);
338+
return Object.keys(groupMethods(affectedExternalApiUsages, mode));
339+
}

0 commit comments

Comments
 (0)