Include in addModeledMethods whether the methods are unsaved or not
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
|
||||
@@ -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),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user