diff --git a/frontend-html/src/model/entities/DataSource.ts b/frontend-html/src/model/entities/DataSource.ts
index 8867c80247..c9b5573231 100644
--- a/frontend-html/src/model/entities/DataSource.ts
+++ b/frontend-html/src/model/entities/DataSource.ts
@@ -51,4 +51,8 @@ export class DataSource implements IDataSource {
getFieldByIndex(index: number): IDataSourceField | undefined {
return this.fields.find(field => field.index === index);
}
+
+ dispose(){
+ this.rowState.dispose();
+ }
}
diff --git a/frontend-html/src/model/entities/FormScreen.ts b/frontend-html/src/model/entities/FormScreen.ts
index 9249ce5cc5..ec4bfcaf81 100644
--- a/frontend-html/src/model/entities/FormScreen.ts
+++ b/frontend-html/src/model/entities/FormScreen.ts
@@ -251,8 +251,13 @@ export class FormScreen implements IFormScreen {
console.log("End of View bindings");
console.log("");
}
-
/* eslint-enable no-console */
+
+ dispose(){
+ for (let dataSource of this.dataSources) {
+ dataSource.dispose();
+ }
+ }
}
export class FormScreenEnvelope implements IFormScreenEnvelope {
diff --git a/frontend-html/src/model/entities/RowState.ts b/frontend-html/src/model/entities/RowState.ts
index 53e47031bd..22597fa798 100644
--- a/frontend-html/src/model/entities/RowState.ts
+++ b/frontend-html/src/model/entities/RowState.ts
@@ -40,12 +40,13 @@ export class RowState implements IRowState {
$type_IRowState: 1 = 1;
suppressWorkingStatus: boolean = false;
dataViewVisibleRows: Map = new Map();
+ disposers: (()=> void)[] = [];
constructor(debouncingDelayMilliseconds?: number) {
this.triggerLoadDebounced = _.debounce(
this.triggerLoadImm,
debouncingDelayMilliseconds == undefined ? 0 : debouncingDelayMilliseconds);
- visibleRowsChanged.subscribe((visibleRows) => {
+ const disposer = visibleRowsChanged.subscribe((visibleRows) => {
const dataSource = getDataSource(this);
if (!visibleRows || dataSource.identifier !== visibleRows.dataSourceId) {
return;
@@ -59,6 +60,7 @@ export class RowState implements IRowState {
this.triggerLoadDebounced();
}
});
+ this.disposers.push(disposer);
}
monitor: FlowBusyMonitor = new FlowBusyMonitor();
@@ -257,6 +259,10 @@ export class RowState implements IRowState {
// TODO: Wait when something is currently loading.
}
+ dispose(){
+ this.disposers.forEach(x => x());
+ }
+
parent?: any;
}
diff --git a/frontend-html/src/model/entities/WorkbenchLifecycle/WorkbenchLifecycle.ts b/frontend-html/src/model/entities/WorkbenchLifecycle/WorkbenchLifecycle.ts
index 85beda0c56..c644654753 100644
--- a/frontend-html/src/model/entities/WorkbenchLifecycle/WorkbenchLifecycle.ts
+++ b/frontend-html/src/model/entities/WorkbenchLifecycle/WorkbenchLifecycle.ts
@@ -386,6 +386,7 @@ export class WorkbenchLifecycle implements IWorkbenchLifecycle {
const api = getApi(this);
if (openedScreen.content) {
if (openedScreen.content.formScreen) {
+ openedScreen.content.formScreen.dispose();
yield api.destroyUI({FormSessionId: getSessionId(openedScreen.content.formScreen)});
} else if (openedScreen.content.preloadedSessionId) {
yield api.destroyUI({FormSessionId: openedScreen.content.preloadedSessionId});
diff --git a/frontend-html/src/model/entities/types/IDataSource.ts b/frontend-html/src/model/entities/types/IDataSource.ts
index d108458e76..956903e31a 100644
--- a/frontend-html/src/model/entities/types/IDataSource.ts
+++ b/frontend-html/src/model/entities/types/IDataSource.ts
@@ -37,6 +37,8 @@ export interface IDataSource extends IDataSourceData {
getFieldByIndex(idex: number): IDataSourceField | undefined;
parent?: any;
+
+ dispose(): void;
}
export const isIDataSource = (o: any): o is IDataSource => o.$type_IDataSource;
diff --git a/frontend-html/src/model/entities/types/IFormScreen.ts b/frontend-html/src/model/entities/types/IFormScreen.ts
index 0f004a83d4..2ed0c9c8d8 100644
--- a/frontend-html/src/model/entities/types/IFormScreen.ts
+++ b/frontend-html/src/model/entities/types/IFormScreen.ts
@@ -184,6 +184,8 @@ export interface IFormScreen extends IFormScreenData {
printMasterDetailTree(): void;
parent?: any;
+
+ dispose(): void;
}
export interface IScreenNotification {
diff --git a/frontend-html/src/model/entities/types/IRowState.ts b/frontend-html/src/model/entities/types/IRowState.ts
index e5ae039f40..de88c55034 100644
--- a/frontend-html/src/model/entities/types/IRowState.ts
+++ b/frontend-html/src/model/entities/types/IRowState.ts
@@ -41,6 +41,8 @@ export interface IRowState extends IRowStateData {
reload(): void;
parent?: any;
+
+ dispose(): void;
}
export interface IRowStateItem {