fix: Correctly update trigger field dependency map (#15733)
This commit is contained in:
parent
f85cbb9938
commit
5c7f4009cb
|
|
@ -385,55 +385,6 @@ describe("DataTreeEvaluator", () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe("triggerfield dependency map", () => {
|
||||
beforeEach(() => {
|
||||
// @ts-expect-error: Types are not available
|
||||
dataTreeEvaluator.createFirstTree(lintingUnEvalTree as DataTree);
|
||||
});
|
||||
it("Creates correct triggerFieldDependencyMap", () => {
|
||||
expect(dataTreeEvaluator.triggerFieldDependencyMap).toEqual({
|
||||
"Button3.onClick": ["Api1", "Button2", "Api2"],
|
||||
"Button2.onClick": ["Api2"],
|
||||
});
|
||||
});
|
||||
it("Creates correct triggerFieldInverseDependencyMap", () => {
|
||||
expect(dataTreeEvaluator.triggerFieldInverseDependencyMap).toEqual({
|
||||
Api1: ["Button3.onClick"],
|
||||
Api2: ["Button3.onClick", "Button2.onClick"],
|
||||
Button2: ["Button3.onClick"],
|
||||
});
|
||||
});
|
||||
it("Correctly updates triggerFieldDependencyMap and triggerFieldInverseDependencyMap", () => {
|
||||
const newUnEvalTree = ({ ...lintingUnEvalTree } as unknown) as DataTree;
|
||||
// delete Api2
|
||||
delete newUnEvalTree["Api2"];
|
||||
dataTreeEvaluator.updateDataTree(newUnEvalTree);
|
||||
expect(dataTreeEvaluator.triggerFieldDependencyMap).toEqual({
|
||||
"Button3.onClick": ["Api1", "Button2"],
|
||||
"Button2.onClick": [],
|
||||
});
|
||||
expect(dataTreeEvaluator.triggerFieldInverseDependencyMap).toEqual({
|
||||
Api1: ["Button3.onClick"],
|
||||
Button2: ["Button3.onClick"],
|
||||
});
|
||||
|
||||
// Add Api2
|
||||
// @ts-expect-error: Types are not available
|
||||
newUnEvalTree["Api2"] = { ...lintingUnEvalTree }["Api2"];
|
||||
dataTreeEvaluator.updateDataTree(newUnEvalTree);
|
||||
expect(dataTreeEvaluator.triggerFieldDependencyMap).toEqual({
|
||||
"Button3.onClick": ["Api1", "Button2", "Api2"],
|
||||
"Button2.onClick": ["Api2"],
|
||||
});
|
||||
|
||||
expect(dataTreeEvaluator.triggerFieldInverseDependencyMap).toEqual({
|
||||
Api1: ["Button3.onClick"],
|
||||
Api2: ["Button3.onClick", "Button2.onClick"],
|
||||
Button2: ["Button3.onClick"],
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("lintTree", () => {
|
||||
const dataTreeEvaluator = new DataTreeEvaluator(widgetConfigMap);
|
||||
beforeEach(() => {
|
||||
|
|
@ -538,4 +489,73 @@ describe("DataTreeEvaluator", () => {
|
|||
).toEqual(expectedButton2LintError);
|
||||
});
|
||||
});
|
||||
|
||||
describe("triggerfield dependency map", () => {
|
||||
beforeEach(() => {
|
||||
// @ts-expect-error: Types are not available
|
||||
dataTreeEvaluator.createFirstTree(lintingUnEvalTree as DataTree);
|
||||
});
|
||||
it("Creates correct triggerFieldDependencyMap", () => {
|
||||
expect(dataTreeEvaluator.triggerFieldDependencyMap).toEqual({
|
||||
"Button3.onClick": ["Api1", "Button2", "Api2"],
|
||||
"Button2.onClick": ["Api2"],
|
||||
});
|
||||
});
|
||||
it("Creates correct triggerFieldInverseDependencyMap", () => {
|
||||
expect(dataTreeEvaluator.triggerFieldInverseDependencyMap).toEqual({
|
||||
Api1: ["Button3.onClick"],
|
||||
Api2: ["Button3.onClick", "Button2.onClick"],
|
||||
Button2: ["Button3.onClick"],
|
||||
});
|
||||
});
|
||||
it("Correctly updates triggerFieldDependencyMap and triggerFieldInverseDependencyMap", () => {
|
||||
const newUnEvalTree = ({ ...lintingUnEvalTree } as unknown) as DataTree;
|
||||
// delete Api2
|
||||
delete newUnEvalTree["Api2"];
|
||||
dataTreeEvaluator.updateDataTree(newUnEvalTree);
|
||||
expect(dataTreeEvaluator.triggerFieldDependencyMap).toEqual({
|
||||
"Button3.onClick": ["Api1", "Button2"],
|
||||
"Button2.onClick": [],
|
||||
});
|
||||
expect(dataTreeEvaluator.triggerFieldInverseDependencyMap).toEqual({
|
||||
Api1: ["Button3.onClick"],
|
||||
Button2: ["Button3.onClick"],
|
||||
});
|
||||
|
||||
// Add Api2
|
||||
// @ts-expect-error: Types are not available
|
||||
newUnEvalTree["Api2"] = { ...lintingUnEvalTree }["Api2"];
|
||||
dataTreeEvaluator.updateDataTree(newUnEvalTree);
|
||||
expect(dataTreeEvaluator.triggerFieldDependencyMap).toEqual({
|
||||
"Button3.onClick": ["Api1", "Button2", "Api2"],
|
||||
"Button2.onClick": ["Api2"],
|
||||
});
|
||||
|
||||
expect(dataTreeEvaluator.triggerFieldInverseDependencyMap).toEqual({
|
||||
Api1: ["Button3.onClick"],
|
||||
Api2: ["Button3.onClick", "Button2.onClick"],
|
||||
Button2: ["Button3.onClick"],
|
||||
});
|
||||
|
||||
// self-reference Button2
|
||||
const newButton2 = { ...lintingUnEvalTree }["Button2"];
|
||||
newButton2.onClick = "{{Api2.run(); AbsentEntity.run(); Button2}}";
|
||||
// @ts-expect-error: Types are not available
|
||||
newUnEvalTree["Button2"] = newButton2;
|
||||
dataTreeEvaluator.updateDataTree(newUnEvalTree);
|
||||
|
||||
// delete Button2
|
||||
delete newUnEvalTree["Button2"];
|
||||
dataTreeEvaluator.updateDataTree(newUnEvalTree);
|
||||
|
||||
expect(dataTreeEvaluator.triggerFieldDependencyMap).toEqual({
|
||||
"Button3.onClick": ["Api1", "Api2"],
|
||||
});
|
||||
|
||||
expect(dataTreeEvaluator.triggerFieldInverseDependencyMap).toEqual({
|
||||
Api1: ["Button3.onClick"],
|
||||
Api2: ["Button3.onClick"],
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -238,14 +238,6 @@ export const updateDependencyMap = ({
|
|||
},
|
||||
);
|
||||
if (entityName === dataTreeDiff.payload.propertyPath) {
|
||||
if (isWidget(entity)) {
|
||||
entity.dynamicTriggerPathList?.forEach((triggerFieldName) => {
|
||||
delete dataTreeEvalRef.triggerFieldDependencyMap[
|
||||
`${entityName}.${triggerFieldName.key}`
|
||||
];
|
||||
didUpdateTriggerDependencyMap = true;
|
||||
});
|
||||
}
|
||||
// When deleted entity is referenced in a trigger field, remove deleted entity from it's triggerfieldDependencyMap
|
||||
if (
|
||||
entityName in dataTreeEvalRef.triggerFieldInverseDependencyMap
|
||||
|
|
@ -264,6 +256,16 @@ export const updateDependencyMap = ({
|
|||
].filter((field) => field !== entityName);
|
||||
});
|
||||
}
|
||||
|
||||
// Remove deleted trigger fields from triggerFieldDependencyMap
|
||||
if (isWidget(entity)) {
|
||||
entity.dynamicTriggerPathList?.forEach((triggerFieldName) => {
|
||||
delete dataTreeEvalRef.triggerFieldDependencyMap[
|
||||
`${entityName}.${triggerFieldName.key}`
|
||||
];
|
||||
didUpdateTriggerDependencyMap = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user