DataModel.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. 'use strict';
  2. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  3. /**
  4. * Licensed Materials - Property of IBM
  5. * IBM Business Analytics (C) Copyright IBM Corp. 2019, 2020
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. /**
  9. * @class DataModel
  10. * @hideconstructor
  11. * @classdesc Provides access to the data model
  12. */
  13. define(['../UniqueID', '../../../lib/@waca/dashboard-common/dist/core/UniqueHashIdBuilder'], function (UniqueID, UniqueHashIdBuilder) {
  14. return function () {
  15. function DataModel(dataModelJson) {
  16. _classCallCheck(this, DataModel);
  17. this._dataModel = dataModelJson;
  18. this._currentIdList = this._processCurrentDataItemIds();
  19. }
  20. DataModel.prototype._processCurrentDataItemIds = function _processCurrentDataItemIds() {
  21. var idList = [];
  22. var dataViews = this._dataModel.dataViews;
  23. if (dataViews) {
  24. for (var i = 0; i < dataViews.length; i++) {
  25. if (!dataViews[i].id) {
  26. dataViews[i].id = UniqueID.generate('model');
  27. }
  28. var dataItems = dataViews[i].dataItems;
  29. if (dataItems) {
  30. for (var j = 0; j < dataItems.length; j++) {
  31. if (!dataItems[j].id) {
  32. var dataItemId = UniqueHashIdBuilder.createUniqueHashId(dataItems[j].itemId, idList);
  33. dataItems[j].id = dataItemId;
  34. }
  35. idList.push(dataItems[j].id);
  36. }
  37. }
  38. }
  39. }
  40. return idList;
  41. };
  42. DataModel.prototype.setModelRefInAllViews = function setModelRefInAllViews(modelRef) {
  43. var dataViews = this._dataModel.dataViews;
  44. var isSet = false;
  45. if (dataViews) {
  46. for (var i = 0; i < dataViews.length; i++) {
  47. isSet = true;
  48. dataViews[i].modelRef = modelRef;
  49. }
  50. }
  51. if (!isSet) {
  52. // create a default data view and set the model ref
  53. this.createDataView().modelRef = modelRef;
  54. }
  55. };
  56. DataModel.prototype.removeDataView = function removeDataView(viewId) {
  57. var dataViews = this._dataModel.dataViews;
  58. if (dataViews) {
  59. this._dataModel.dataViews = dataViews.filter(function (dataView) {
  60. return dataView.id !== viewId;
  61. });
  62. }
  63. };
  64. DataModel.prototype.getDataView = function getDataView(viewId) {
  65. var dataView = null;
  66. var dataViews = this._dataModel.dataViews;
  67. if (dataViews) {
  68. for (var i = 0; i < dataViews.length; i++) {
  69. // If view id is not provided, default to first view id.
  70. if (!viewId && i === 0 || dataViews[i].id === viewId) {
  71. dataView = dataViews[i];
  72. break;
  73. }
  74. }
  75. }
  76. return dataView;
  77. };
  78. DataModel.prototype.createDataView = function createDataView(id) {
  79. if (!this._dataModel.dataViews) {
  80. this._dataModel.dataViews = [];
  81. }
  82. var dataView = {
  83. id: id || UniqueID.generate('model')
  84. };
  85. this._dataModel.dataViews.push(dataView);
  86. return dataView;
  87. };
  88. DataModel.prototype.moveDataItemsToView = function moveDataItemsToView(dataItemIds, viewId) {
  89. var _this = this;
  90. dataItemIds.forEach(function (id) {
  91. var info = _this._getDataItemInfo(id);
  92. if (info.dataView.id !== viewId) {
  93. _this.addDataItem(info.dataItem, viewId);
  94. }
  95. });
  96. };
  97. DataModel.prototype.getDataViewIdForDataItem = function getDataViewIdForDataItem(dataItemId) {
  98. var info = this._getDataItemInfo(dataItemId);
  99. return info ? info.dataView.id : null;
  100. };
  101. DataModel.prototype.getDataItem = function getDataItem(dataItemId) {
  102. var info = this._getDataItemInfo(dataItemId);
  103. return info ? info.dataItem : null;
  104. };
  105. DataModel.prototype.removeDataItem = function removeDataItem(id, hasLocalFilter) {
  106. var removed = void 0;
  107. var info = this._getDataItemInfo(id);
  108. if (info) {
  109. info.dataView.dataItems.splice(info.dataItemIndex, 1);
  110. var idIndex = this._currentIdList.indexOf(id);
  111. if (idIndex !== -1) {
  112. this._currentIdList.splice(idIndex, 1);
  113. }
  114. removed = info.dataItem;
  115. if (info.dataView.dataItems.length === 0 && !hasLocalFilter) {
  116. // remove the empty dataView
  117. this.removeDataView(info.dataView.id);
  118. }
  119. }
  120. return removed;
  121. };
  122. DataModel.prototype.addDataItem = function addDataItem(dataItem, viewId) {
  123. if (!dataItem.id) {
  124. // We generate a predicatable unique id based on the column id
  125. dataItem.id = UniqueHashIdBuilder.createUniqueHashId(dataItem.columnId, this._currentIdList);
  126. }
  127. this._currentIdList.push(dataItem.id);
  128. // First remove it if it already exists
  129. var model = this.removeDataItem(dataItem.id);
  130. if (!model) {
  131. // Pick only id, itemId, columnId, itemLabel and navigationPathId
  132. // Eventually we will support more..
  133. model = function (_ref) {
  134. var id = _ref.id,
  135. itemId = _ref.itemId,
  136. columnId = _ref.columnId,
  137. itemLabel = _ref.itemLabel,
  138. navigationPathId = _ref.navigationPathId;
  139. return { id: id, itemId: itemId, columnId: columnId, itemLabel: itemLabel, navigationPathId: navigationPathId };
  140. }(dataItem);
  141. // The internal spec use itemId instead of columnId
  142. if (model.columnId) {
  143. model.itemId = model.columnId;
  144. delete model.columnId;
  145. }
  146. }
  147. // Find or create the target dataView
  148. var dataView = this.getDataView(viewId);
  149. if (!dataView) {
  150. dataView = this.createDataView();
  151. }
  152. if (!dataView.dataItems) {
  153. dataView.dataItems = [];
  154. }
  155. dataView.dataItems.push(model);
  156. return model;
  157. };
  158. DataModel.prototype.getDataItemList = function getDataItemList() {
  159. var result = [];
  160. var dataViews = this._dataModel.dataViews;
  161. if (dataViews) {
  162. for (var i = 0; i < dataViews.length; i++) {
  163. var dataItems = dataViews[i].dataItems;
  164. if (dataItems) {
  165. for (var j = 0; j < dataItems.length; j++) {
  166. result.push(dataItems[j]);
  167. }
  168. }
  169. }
  170. }
  171. return result;
  172. };
  173. DataModel.prototype._getDataItemInfo = function _getDataItemInfo(dataItemId) {
  174. var dataItemInfo = null;
  175. var dataViews = this._dataModel.dataViews;
  176. if (dataViews) {
  177. for (var i = 0; i < dataViews.length; i++) {
  178. var dataItems = dataViews[i].dataItems;
  179. if (dataItems) {
  180. for (var j = 0; j < dataItems.length; j++) {
  181. if (dataItems[j].id === dataItemId) {
  182. dataItemInfo = {
  183. dataItem: dataItems[j],
  184. dataView: dataViews[i],
  185. dataItemIndex: j,
  186. dataViewIndex: i
  187. };
  188. break;
  189. }
  190. }
  191. }
  192. if (dataItemInfo) {
  193. break;
  194. }
  195. }
  196. }
  197. return dataItemInfo;
  198. };
  199. return DataModel;
  200. }();
  201. });
  202. //# sourceMappingURL=DataModel.js.map