diff --git a/htdocs/WebApplications/CustomizableApp/ViewModels/ViewModel_UnionTable.js b/htdocs/WebApplications/CustomizableApp/ViewModels/ViewModel_UnionTable.js
index abdd7964b6a2c38c0f8d4c74d084b9aa09a12b86..d1e07f0df891d5e0bcffeb8d8460016e509927fc 100644
--- a/htdocs/WebApplications/CustomizableApp/ViewModels/ViewModel_UnionTable.js
+++ b/htdocs/WebApplications/CustomizableApp/ViewModels/ViewModel_UnionTable.js
@@ -1,7 +1,7 @@
-// Copyright (c) 2000-2023 Ericsson Telecom AB Telecom AB //
+// Copyright (c) 2000-2025 Ericsson Telecom AB Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at //
-// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
+// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function CViewModel_UnionTable(aViewModel, aOptions) {
"use strict";
@@ -9,10 +9,9 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
/** private members */
var mViewModel = aViewModel;
var mOptions = aOptions;
- //var mRq = mViewModel.getRequest();
var mBinder;
var mResponseDataPaths = [];
- var mSelections = []; // mSelectionss is a list of references to objects, each containing a field named "selection"
+ var mSelections = []; // mSelections is a list of references to objects, each containing a field named "selection"
var mThis = this;
var mEnlistElementName = mOptions.enlistElementName;
if (mEnlistElementName === undefined)
@@ -22,7 +21,7 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
this.setSelectionToControl = function (aSelection) {
/** aSelection is a reference to an object containing a "selection" field */
- mSelections.push(aSelection);
+ mSelections.push(aSelection);
};
this.setReponseDataPath = function (aExpectedReponseDataIndex, aReponseDataPath) {
@@ -30,7 +29,7 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
};
this.setBinder = function (aBinder) {
- mBinder = aBinder;
+ mBinder = aBinder;
};
/** public functions - Interface for views */
@@ -65,7 +64,7 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
"heading": header[i],
"elementIndex": i
};
- }
+ }
return header;
};
@@ -73,21 +72,19 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
return mViewModel.getRequestFromPath(mResponseDataPaths[0]).getData.element;
};
- this.getResponseElement = function (aReponseDataPath, aFullTableSelection) {
+ this.getResponseElement = function (aFullTableSelection) {
var lElement;
- if (aFullTableSelection) {
- aFullTableSelection.parents = [];
- aFullTableSelection.depth = aReponseDataPath.length;
- aFullTableSelection.path = aReponseDataPath;
- }
- if (aReponseDataPath) {
- lElement = mViewModel.getResponseElement();
- if (lElement != undefined) {
- lElement = lElement[aReponseDataPath[0]];
- }
+ if (aFullTableSelection.path) {
+ var pathIdx = 0;
+ lElement = mViewModel.getResponseElement();
+ if (lElement != undefined) {
+ lElement = lElement[aFullTableSelection.path[pathIdx]];
+ }
if (lElement) {
- var lRq = mViewModel.getRequest()[aReponseDataPath[0]];
- for (var i = 1; i < aReponseDataPath.length && lElement; ++i) {
+ var lRq = mViewModel.getRequest()[aFullTableSelection.path[pathIdx]];
+
+ // need to select the table data from the path, which is the last two element
+ for (; pathIdx < aFullTableSelection.path.length - 1 && lElement; ++pathIdx) {
if (lElement.list && lRq.getData.selection && lRq.getData.selection.length > 0) {
if (aFullTableSelection) {
aFullTableSelection.depth--;
@@ -99,67 +96,76 @@ function CViewModel_UnionTable(aViewModel, aOptions) {
aFullTableSelection.path = aFullTableSelection.path.slice(1);
}
if (lElement.list[lRq.getData.selection[0]] && lElement.list[lRq.getData.selection[0]].node.childVals) {
- lElement = lElement.list[lRq.getData.selection[0]].node.childVals[aReponseDataPath[i]];
+ lElement = lElement.list[lRq.getData.selection[0]].node.childVals[aFullTableSelection.path[pathIdx]];
} else {
lElement = undefined;
break;
}
- } else if (!lRq.getData.selection || lRq.getData.selection.length === 0) {
- /**/
} else if (lElement.node && lElement.node.childVals) {
- lElement = lElement.node.childVals[aReponseDataPath[i]];
+ aFullTableSelection.path.shift();
+ aFullTableSelection.depth--;
+ lElement = lElement.node.childVals[aFullTableSelection.path[pathIdx]];
+ } else if (!lRq.getData.selection || lRq.getData.selection.length === 0) {
+ // intentionally blank
} else
lElement = {
"error" : "cannot determine node"
};
- if (lRq.getData.children)
- lRq = lRq.getData.children[aReponseDataPath[i]];
+ if (lRq.getData.children) {
+ lRq = lRq.getData.children[aFullTableSelection.path[pathIdx]];
+ }
}
}
- }
+ }
return lElement;
};
this.getTable = function () {
- var aFullTableSelection = {};
- var response = mThis.getResponseElement(mResponseDataPaths[0], aFullTableSelection);
+ var pathCopy = mcopy(mResponseDataPaths[0]);
+ var aFullTableSelection = {
+ parents: [],
+ depth: pathCopy.length,
+ path: pathCopy
+ };
+
+ var response = mThis.getResponseElement(aFullTableSelection);
return {
selection : mSelections[0] ? mSelections[0].selection : undefined,
table : (response === undefined) ? [] : flattenResponseElement(response.list, aFullTableSelection.depth, 0, aFullTableSelection.parents, aFullTableSelection.path.slice(1))
};
};
-
+
this.setValue = function() {};
/** private functions */
- function flattenResponseElement(arr, limit, depth, parents, path) {
+ function flattenResponseElement(arr, limit, depth, parents, path) {
if (arr) {
- limit = limit || 0;
- depth = depth || 0;
- parents = parents || [];
- path = path || [];
- return arr.reduce(function _reduce(flat, toFlatten) {
- if (limit === depth && toFlatten.node)
- return flat.concat({"val": toFlatten.node.val});
- else if (limit === depth && toFlatten.list)
- return flat.concat([flattenResponseElement(toFlatten.list, limit, depth, parents, path)].join());
- else if (limit === depth + 1 && toFlatten.node) {
- if (mEnlistElementName)
- return flat.concat([parents.concat([{"val": toFlatten.node.val}].concat(flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, [], path)))]);
- else
- return flat.concat([flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, [], path)]);
- } else if (Array.isArray(toFlatten))
- return flat.concat(flattenResponseElement(toFlatten, limit, depth, parents, path));
- else if (toFlatten.node && toFlatten.node.childVals && limit !== depth)
- return flat.concat(flattenResponseElement([toFlatten.node.childVals[path[depth]]], limit, depth + 1, parents.concat([{"val": toFlatten.node.val}]), path));
- else if (toFlatten.node && toFlatten.node.childVals)
- return flat.concat(flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, parents.concat([{"val": toFlatten.node.val}]), path));
- else if (toFlatten.list)
- return flat.concat(flattenResponseElement(toFlatten.list, limit, depth, parents, path));
- else
- console.error("flattenResponseElement met an unexpected condition. Reason: The response object is nonconformant OR not all parents have a selection!");
- }, []);
+ limit = limit || 0;
+ depth = depth || 0;
+ parents = parents || [];
+ path = path || [];
+ return arr.reduce(function _reduce(flat, toFlatten) {
+ if (limit === depth && toFlatten.node)
+ return flat.concat({"val": toFlatten.node.val});
+ else if (limit === depth && toFlatten.list)
+ return flat.concat([flattenResponseElement(toFlatten.list, limit, depth, parents, path)].join());
+ else if (limit === depth + 1 && toFlatten.node) {
+ if (mEnlistElementName)
+ return flat.concat([parents.concat([{"val": toFlatten.node.val}].concat(flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, [], path)))]);
+ else
+ return flat.concat([flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, [], path)]);
+ } else if (Array.isArray(toFlatten))
+ return flat.concat(flattenResponseElement(toFlatten, limit, depth, parents, path));
+ else if (toFlatten.node && toFlatten.node.childVals && limit !== depth)
+ return flat.concat(flattenResponseElement([toFlatten.node.childVals[path[depth]]], limit, depth + 1, parents.concat([{"val": toFlatten.node.val}]), path));
+ else if (toFlatten.node && toFlatten.node.childVals)
+ return flat.concat(flattenResponseElement(toFlatten.node.childVals, limit, depth + 1, parents.concat([{"val": toFlatten.node.val}]), path));
+ else if (toFlatten.list)
+ return flat.concat(flattenResponseElement(toFlatten.list, limit, depth, parents, path));
+ else
+ console.error("flattenResponseElement met an unexpected condition. Reason: The response object is nonconformant OR not all parents have a selection!");
+ }, []);
}
}
}