Merge pull request #2594 from github/robertbrignull/data-unsaved-changes

Include in addModeledMethods whether the methods are unsaved or not
This commit is contained in:
Robert
2023-07-11 16:26:44 +01:00
committed by GitHub
3 changed files with 46 additions and 22 deletions

View File

@@ -509,17 +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>;
/**
* 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 {
@@ -560,6 +557,7 @@ export type ToDataExtensionsEditorMessage =
| SetExtensionPackStateMessage
| SetExternalApiUsagesMessage
| ShowProgressMessage
| LoadModeledMethodsMessage
| AddModeledMethodsMessage;
export type FromDataExtensionsEditorMessage =

View File

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

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;
@@ -92,22 +93,37 @@ 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,
};
});
break;
case "addModeledMethods":
setModeledMethods((oldModeledMethods) => {
return {
...msg.modeledMethods,
...Object.fromEntries(
Object.entries(oldModeledMethods).filter(
([, value]) => value.type !== "none",
),
),
};
});
setUnsavedModels(
(oldUnsavedModels) =>
new Set([
...oldUnsavedModels,
...modelsAffectedByNewModeledMethods(
msg.modeledMethods,
externalApiUsages,
viewState?.mode ?? Mode.Application,
),
]),
);
break;
default:
assertNever(msg);
}
@@ -122,7 +138,7 @@ export function DataExtensionsEditor({
return () => {
window.removeEventListener("message", listener);
};
}, []);
}, [externalApiUsages, viewState?.mode]);
const modeledPercentage = useMemo(
() => calculateModeledPercentage(externalApiUsages),
@@ -309,3 +325,15 @@ export function DataExtensionsEditor({
</DataExtensionsEditorContainer>
);
}
function modelsAffectedByNewModeledMethods(
modeledMethods: Record<string, ModeledMethod>,
externalApiUsages: ExternalApiUsage[],
mode: Mode,
): string[] {
const signatures = new Set(Object.keys(modeledMethods));
const affectedExternalApiUsages = externalApiUsages.filter(
(externalApiUsage) => signatures.has(externalApiUsage.signature),
);
return Object.keys(groupMethods(affectedExternalApiUsages, mode));
}