'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Licensed Materials - Property of IBM * IBM Business Analytics (C) Copyright IBM Corp. 2019, 2020 * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /** * @class DataModel * @hideconstructor * @classdesc Provides access to the data model */ define(['../UniqueID', '../../../lib/@waca/dashboard-common/dist/core/UniqueHashIdBuilder'], function (UniqueID, UniqueHashIdBuilder) { return function () { function DataModel(dataModelJson) { _classCallCheck(this, DataModel); this._dataModel = dataModelJson; this._currentIdList = this._processCurrentDataItemIds(); } DataModel.prototype._processCurrentDataItemIds = function _processCurrentDataItemIds() { var idList = []; var dataViews = this._dataModel.dataViews; if (dataViews) { for (var i = 0; i < dataViews.length; i++) { if (!dataViews[i].id) { dataViews[i].id = UniqueID.generate('model'); } var dataItems = dataViews[i].dataItems; if (dataItems) { for (var j = 0; j < dataItems.length; j++) { if (!dataItems[j].id) { var dataItemId = UniqueHashIdBuilder.createUniqueHashId(dataItems[j].itemId, idList); dataItems[j].id = dataItemId; } idList.push(dataItems[j].id); } } } } return idList; }; DataModel.prototype.setModelRefInAllViews = function setModelRefInAllViews(modelRef) { var dataViews = this._dataModel.dataViews; var isSet = false; if (dataViews) { for (var i = 0; i < dataViews.length; i++) { isSet = true; dataViews[i].modelRef = modelRef; } } if (!isSet) { // create a default data view and set the model ref this.createDataView().modelRef = modelRef; } }; DataModel.prototype.removeDataView = function removeDataView(viewId) { var dataViews = this._dataModel.dataViews; if (dataViews) { this._dataModel.dataViews = dataViews.filter(function (dataView) { return dataView.id !== viewId; }); } }; DataModel.prototype.getDataView = function getDataView(viewId) { var dataView = null; var dataViews = this._dataModel.dataViews; if (dataViews) { for (var i = 0; i < dataViews.length; i++) { // If view id is not provided, default to first view id. if (!viewId && i === 0 || dataViews[i].id === viewId) { dataView = dataViews[i]; break; } } } return dataView; }; DataModel.prototype.createDataView = function createDataView(id) { if (!this._dataModel.dataViews) { this._dataModel.dataViews = []; } var dataView = { id: id || UniqueID.generate('model') }; this._dataModel.dataViews.push(dataView); return dataView; }; DataModel.prototype.moveDataItemsToView = function moveDataItemsToView(dataItemIds, viewId) { var _this = this; dataItemIds.forEach(function (id) { var info = _this._getDataItemInfo(id); if (info.dataView.id !== viewId) { _this.addDataItem(info.dataItem, viewId); } }); }; DataModel.prototype.getDataViewIdForDataItem = function getDataViewIdForDataItem(dataItemId) { var info = this._getDataItemInfo(dataItemId); return info ? info.dataView.id : null; }; DataModel.prototype.getDataItem = function getDataItem(dataItemId) { var info = this._getDataItemInfo(dataItemId); return info ? info.dataItem : null; }; DataModel.prototype.removeDataItem = function removeDataItem(id, hasLocalFilter) { var removed = void 0; var info = this._getDataItemInfo(id); if (info) { info.dataView.dataItems.splice(info.dataItemIndex, 1); var idIndex = this._currentIdList.indexOf(id); if (idIndex !== -1) { this._currentIdList.splice(idIndex, 1); } removed = info.dataItem; if (info.dataView.dataItems.length === 0 && !hasLocalFilter) { // remove the empty dataView this.removeDataView(info.dataView.id); } } return removed; }; DataModel.prototype.addDataItem = function addDataItem(dataItem, viewId) { if (!dataItem.id) { // We generate a predicatable unique id based on the column id dataItem.id = UniqueHashIdBuilder.createUniqueHashId(dataItem.columnId, this._currentIdList); } this._currentIdList.push(dataItem.id); // First remove it if it already exists var model = this.removeDataItem(dataItem.id); if (!model) { // Pick only id, itemId, columnId, itemLabel and navigationPathId // Eventually we will support more.. model = function (_ref) { var id = _ref.id, itemId = _ref.itemId, columnId = _ref.columnId, itemLabel = _ref.itemLabel, navigationPathId = _ref.navigationPathId; return { id: id, itemId: itemId, columnId: columnId, itemLabel: itemLabel, navigationPathId: navigationPathId }; }(dataItem); // The internal spec use itemId instead of columnId if (model.columnId) { model.itemId = model.columnId; delete model.columnId; } } // Find or create the target dataView var dataView = this.getDataView(viewId); if (!dataView) { dataView = this.createDataView(); } if (!dataView.dataItems) { dataView.dataItems = []; } dataView.dataItems.push(model); return model; }; DataModel.prototype.getDataItemList = function getDataItemList() { var result = []; var dataViews = this._dataModel.dataViews; if (dataViews) { for (var i = 0; i < dataViews.length; i++) { var dataItems = dataViews[i].dataItems; if (dataItems) { for (var j = 0; j < dataItems.length; j++) { result.push(dataItems[j]); } } } } return result; }; DataModel.prototype._getDataItemInfo = function _getDataItemInfo(dataItemId) { var dataItemInfo = null; var dataViews = this._dataModel.dataViews; if (dataViews) { for (var i = 0; i < dataViews.length; i++) { var dataItems = dataViews[i].dataItems; if (dataItems) { for (var j = 0; j < dataItems.length; j++) { if (dataItems[j].id === dataItemId) { dataItemInfo = { dataItem: dataItems[j], dataView: dataViews[i], dataItemIndex: j, dataViewIndex: i }; break; } } } if (dataItemInfo) { break; } } } return dataItemInfo; }; return DataModel; }(); }); //# sourceMappingURL=DataModel.js.map