Skip to content

Commit d92b28c

Browse files
Merge pull request #2780 from IDEMSInternational/fix/data-items-outer-local
hotfix: data-items local variables
2 parents 87d24f9 + 785dccf commit d92b28c

File tree

5 files changed

+23
-5
lines changed

5 files changed

+23
-5
lines changed

src/app/shared/components/template/components/data-items/data-items.service.ts

+5
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,11 @@ export class DataItemsService {
165165
} as any);
166166
// HACK - still want to be able to use localContext from parent rows so copy to child processor
167167
processor.templateRowMap = JSON.parse(JSON.stringify(templateRowMap));
168+
const templateRowMapValues = Object.fromEntries(
169+
Object.entries(templateRowMap).map(([key, { value }]) => [key, value])
170+
);
171+
processor.templateRowMapValues = templateRowMapValues;
172+
168173
await processor.processContainerTemplateRows();
169174
return processor.renderedRows();
170175
}

src/app/shared/components/template/services/instance/template-action.service.spec.ts

+14-4
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,16 @@ class MockTemplateRowService implements Partial<TemplateRowService> {
3131
mock_row_1: { value: "", _nested_name: "mock_row_1", name: "mock_row_1", type: "" },
3232
mock_row_2: { value: "", _nested_name: "mock_row_2", name: "mock_row_2", type: "" },
3333
};
34+
templateRowMapValues = {
35+
mock_row_1: "",
36+
mock_row_2: "",
37+
};
3438
processRowUpdates = async () => null;
3539
}
3640

3741
class MockContainer implements Partial<TemplateContainerComponent> {
3842
templateRowService = new MockTemplateRowService() as any as TemplateRowService;
43+
3944
get templateRowMap() {
4045
return this.templateRowService.templateRowMap;
4146
}
@@ -74,14 +79,16 @@ describe("TemplateActionService", () => {
7479
await service.handleActions([
7580
{ trigger: "click", action_id: "set_local", args: ["mock_row_1", "updated"] },
7681
]);
77-
expect(service.container.templateRowMap.mock_row_1.value).toEqual("updated");
82+
expect(service.container.templateRowService.templateRowMap.mock_row_1.value).toEqual("updated");
83+
expect(service.container.templateRowService.templateRowMapValues.mock_row_1).toEqual("updated");
7884
});
7985

8086
it("set_self action", async () => {
8187
await service.handleActions([
8288
{ trigger: "click", action_id: "set_self", args: ["mock_row_1", "updated"] },
8389
]);
84-
expect(service.container.templateRowMap.mock_row_1.value).toEqual("updated");
90+
expect(service.container.templateRowService.templateRowMap.mock_row_1.value).toEqual("updated");
91+
expect(service.container.templateRowService.templateRowMapValues.mock_row_1).toEqual("updated");
8592
});
8693

8794
it("Uses latest value for `this.value` arg", async () => {
@@ -97,7 +104,8 @@ describe("TemplateActionService", () => {
97104
],
98105
_triggeredBy
99106
);
100-
expect(service.container.templateRowMap.mock_row_2.value).toEqual("updated");
107+
expect(service.container.templateRowService.templateRowMap.mock_row_2.value).toEqual("updated");
108+
expect(service.container.templateRowService.templateRowMapValues.mock_row_2).toEqual("updated");
101109
// also include test case of concatenated expression
102110
await service.handleActions(
103111
[
@@ -109,7 +117,9 @@ describe("TemplateActionService", () => {
109117
],
110118
_triggeredBy
111119
);
112-
expect(service.container.templateRowMap.mock_row_2.value).toEqual("prefix_updated");
120+
expect(service.container.templateRowService.templateRowMap.mock_row_2.value).toEqual(
121+
"prefix_updated"
122+
);
113123
});
114124

115125
it("Uses latest value for `this.value` param", async () => {

src/app/shared/components/template/services/instance/template-action.service.ts

+2
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,8 @@ export class TemplateActionService extends SyncServiceBase {
382382
}
383383
rowEntry.value = value;
384384
this.container.templateRowService.templateRowMap[rowEntry._nested_name] = rowEntry;
385+
this.container.templateRowService.templateRowMapValues[rowEntry._nested_name] =
386+
rowEntry.value;
385387
} else {
386388
// TODO
387389
console.warn("Setting local variable which does not exist", { key, value }, "TODO");

src/app/shared/components/template/services/instance/template-process.service.ts

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export class TemplateProcessService extends SyncServiceBase {
6464
this.container.template = template;
6565
// reset any existing templateRowMap data
6666
this.container.templateRowService.templateRowMap = {};
67+
this.container.templateRowService.templateRowMapValues = {};
6768
// process the template as if it were rendered
6869
// TODO - should filter out template rows to only include those used programatically (e.g. set_variable, set_field etc.)
6970
await this.container.templateRowService.processContainerTemplateRows();

src/app/shared/components/template/services/instance/template-row.service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class TemplateRowService extends SyncServiceBase {
3737
public templateRowMap: ITemplateRowMap = {};
3838

3939
/** Modified templateRowMap to only include row values, for use in local evalContext */
40-
private templateRowMapValues: { [row_nested_name: string]: FlowTypes.TemplateRow["value"] } = {};
40+
public templateRowMapValues: { [row_nested_name: string]: FlowTypes.TemplateRow["value"] } = {};
4141

4242
public renderedRows = signal<FlowTypes.TemplateRow[]>([], { equal: isEqual }); // rows processed and filtered by condition
4343

0 commit comments

Comments
 (0)