Include in addModeledMethods whether the methods are unsaved or not

This commit is contained in:
Robert
2023-07-07 16:42:47 +01:00
parent bf0032d8de
commit f7239b073a
3 changed files with 37 additions and 2 deletions

View File

@@ -512,7 +512,11 @@ export interface ShowProgressMessage {
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

View File

@@ -259,6 +259,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
await this.postMessage({
t: "addModeledMethods",
modeledMethods: existingModeledMethods,
unsaved: false,
});
} catch (e: unknown) {
void showAndLogErrorMessage(
@@ -387,6 +388,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
await this.postMessage({
t: "addModeledMethods",
modeledMethods: modeledMethodsByName,
unsaved: true,
overrideNone: true,
});
},
@@ -481,6 +483,7 @@ export class DataExtensionsEditorView extends AbstractWebview<
await this.postMessage({
t: "addModeledMethods",
modeledMethods: predictedModeledMethods,
unsaved: true,
overrideNone: true,
});

View File

@@ -17,6 +17,7 @@ import { DataExtensionEditorViewState } from "../../data-extensions-editor/share
import { ModeledMethodsList } from "./ModeledMethodsList";
import { percentFormatter } from "./formatters";
import { Mode } from "../../data-extensions-editor/shared/mode";
import { groupMethods } from "../../data-extensions-editor/shared/sorting";
const DataExtensionsEditorContainer = styled.div`
margin-top: 1rem;
@@ -107,6 +108,23 @@ export function DataExtensionsEditor({
...filteredOldModeledMethods,
};
});
if (msg.unsaved) {
const affectedExternalApiUsages =
externalApiUsagesForModeledMethods(
msg.modeledMethods,
externalApiUsages,
);
const affectedModelNames = Object.keys(
groupMethods(
affectedExternalApiUsages,
viewState?.mode ?? Mode.Application,
),
);
setUnsavedModels(
(oldUnsavedModels) =>
new Set([...oldUnsavedModels, ...affectedModelNames]),
);
}
break;
default:
assertNever(msg);
@@ -122,7 +140,7 @@ export function DataExtensionsEditor({
return () => {
window.removeEventListener("message", listener);
};
}, []);
}, [externalApiUsages, viewState?.mode]);
const modeledPercentage = useMemo(
() => calculateModeledPercentage(externalApiUsages),
@@ -308,3 +326,13 @@ export function DataExtensionsEditor({
</DataExtensionsEditorContainer>
);
}
function externalApiUsagesForModeledMethods(
modeledMethods: Record<string, ModeledMethod>,
externalApiUsages: ExternalApiUsage[],
): ExternalApiUsage[] {
const signatures = new Set(Object.keys(modeledMethods));
return externalApiUsages.filter((externalApiUsage) =>
signatures.has(externalApiUsage.signature),
);
}