Split addModeledMethods into that and loadModeledMethods

This commit is contained in:
Robert
2023-07-11 15:23:30 +01:00
parent 930103b3a8
commit 370872d005
3 changed files with 37 additions and 48 deletions

View File

@@ -509,21 +509,14 @@ export interface ShowProgressMessage {
message: string;
}
export interface LoadModeledMethodsMessage {
t: "loadModeledMethods";
modeledMethods: Record<string, ModeledMethod>;
}
export interface AddModeledMethodsMessage {
t: "addModeledMethods";
modeledMethods: Record<string, ModeledMethod>;
/**
* Are these modeled methods newly generated in some way and not yet
* saved in any model file, or are they loaded from an existing model file.
*/
unsaved: boolean;
/**
* If true, then any existing modeled methods set to "none" will be
* overwritten by the new modeled methods. Otherwise, the "none" modeled
* methods will not be overwritten, even if the new modeled methods
* contain a better model.
*/
overrideNone?: boolean;
}
export interface SwitchModeMessage {
@@ -564,6 +557,7 @@ export type ToDataExtensionsEditorMessage =
| SetExtensionPackStateMessage
| SetExternalApiUsagesMessage
| ShowProgressMessage
| LoadModeledMethodsMessage
| AddModeledMethodsMessage;
export type FromDataExtensionsEditorMessage =

View File

@@ -257,9 +257,8 @@ export class DataExtensionsEditorView extends AbstractWebview<
}
await this.postMessage({
t: "addModeledMethods",
t: "loadModeledMethods",
modeledMethods: existingModeledMethods,
unsaved: false,
});
} catch (e: unknown) {
void showAndLogErrorMessage(
@@ -388,8 +387,6 @@ export class DataExtensionsEditorView extends AbstractWebview<
await this.postMessage({
t: "addModeledMethods",
modeledMethods: modeledMethodsByName,
unsaved: true,
overrideNone: true,
});
},
progress: (update) => this.showProgress(update),
@@ -483,8 +480,6 @@ export class DataExtensionsEditorView extends AbstractWebview<
await this.postMessage({
t: "addModeledMethods",
modeledMethods: predictedModeledMethods,
unsaved: true,
overrideNone: true,
});
await this.clearProgress();

View File

@@ -93,38 +93,36 @@ export function DataExtensionsEditor({
case "showProgress":
setProgress(msg);
break;
case "addModeledMethods":
case "loadModeledMethods":
setModeledMethods((oldModeledMethods) => {
const filteredOldModeledMethods = msg.overrideNone
? Object.fromEntries(
Object.entries(oldModeledMethods).filter(
([, value]) => value.type !== "none",
),
)
: oldModeledMethods;
return {
...msg.modeledMethods,
...filteredOldModeledMethods,
...oldModeledMethods,
};
});
if (msg.unsaved) {
const affectedExternalApiUsages =
externalApiUsagesForModeledMethods(
msg.modeledMethods,
externalApiUsages,
);
const affectedModelNames = Object.keys(
groupMethods(
affectedExternalApiUsages,
viewState?.mode ?? Mode.Application,
break;
case "addModeledMethods":
setModeledMethods((oldModeledMethods) => {
return {
...msg.modeledMethods,
...Object.fromEntries(
Object.entries(oldModeledMethods).filter(
([, value]) => value.type !== "none",
),
),
);
setUnsavedModels(
(oldUnsavedModels) =>
new Set([...oldUnsavedModels, ...affectedModelNames]),
);
}
};
});
setUnsavedModels(
(oldUnsavedModels) =>
new Set([
...oldUnsavedModels,
...modelsAffectedByNewModeledMethods(
msg.modeledMethods,
externalApiUsages,
viewState?.mode ?? Mode.Application,
),
]),
);
break;
default:
assertNever(msg);
@@ -328,12 +326,14 @@ export function DataExtensionsEditor({
);
}
function externalApiUsagesForModeledMethods(
function modelsAffectedByNewModeledMethods(
modeledMethods: Record<string, ModeledMethod>,
externalApiUsages: ExternalApiUsage[],
): ExternalApiUsage[] {
mode: Mode,
): string[] {
const signatures = new Set(Object.keys(modeledMethods));
return externalApiUsages.filter((externalApiUsage) =>
signatures.has(externalApiUsage.signature),
const affectedExternalApiUsages = externalApiUsages.filter(
(externalApiUsage) => signatures.has(externalApiUsage.signature),
);
return Object.keys(groupMethods(affectedExternalApiUsages, mode));
}