'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 VisDnD * @hideconstructor * * @classdesc Handles drag and drop of metadata to create a visualization. */ define(['../../../../../lib/@waca/dashboard-common/dist/api/DnDProviderAPI', '../../../../../lib/@waca/dashboard-common/dist/core/APIFactory', 'underscore'], function (DnDProviderAPI, APIFactory, _) { var METADATA_TYPES = ['MODEL_ITEM', 'GRID_HEADER_ITEM']; return function () { function MetadataDnD() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, MetadataDnD); this.features = options.features; var canvasDnD = this.features['CanvasDnD']; if (!canvasDnD) { throw new Error('MetadataDnD should depend on the CanvasDnD dashboard feature'); } canvasDnD.registerProvider(this.getAPI()); } MetadataDnD.prototype.getAPI = function getAPI() { if (!this.api) { this.api = APIFactory.createAPI(this, [DnDProviderAPI]); } return this.api; }; MetadataDnD.prototype.destroy = function destroy() { this.api = null; }; MetadataDnD.prototype.accepts = function accepts(payload, options) { return MetadataDnD.canAccepts(payload, options); }; MetadataDnD.canAccepts = function canAccepts() { var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var isValid = payload.data && payload.data.utils && payload.data.utils.isValid(options); return isValid && METADATA_TYPES.indexOf(payload.type) !== -1 ? true : false; }; MetadataDnD.prototype.onDrop = function onDrop() { var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (!payload.data || !(METADATA_TYPES.indexOf(payload.type) !== -1)) { return null; } var dataItems = []; var localFilters = []; var droppedColumns = payload.data.columns ? payload.data.columns : []; var originalMetadataColumns = _.map(droppedColumns, function (column) { return column.original.metadataColumn; }); var navPathIds = _.reduce(originalMetadataColumns, function (result, item) { var parent = item.getParent(); var isDrillGroup = parent && parent.getObjectType() === 'DrillGroup'; var navPathId = isDrillGroup && typeof parent.getIdentifier === 'function' ? parent.getId() : null; var itemId = item.getId(); if (navPathId && itemId) { var currentNavPathID = {}; currentNavPathID[itemId] = navPathId; return _.defaults(result, currentNavPathID); } else { return result; } }, {}); var metadataColumns = _.map(droppedColumns, function (column) { return column.metadataColumn; }); var columnIds = []; metadataColumns.forEach(function (metadataColumn) { if (metadataColumn.isFilter()) { localFilters.push({ id: metadataColumn.getId(), columnId: metadataColumn.getId() }); } else { columnIds.push(metadataColumn.getId()); dataItems.push({ itemId: metadataColumn.getId(), itemLabel: metadataColumn.getLabel() }); } }); //Now add selected members as local filters var columnsWithMembers = payload.data.utils.getColumnsWithMembers(); metadataColumns.forEach(function (metadataColumn) { var useAsLocalFilters = columnsWithMembers[metadataColumn.getId()]; if (useAsLocalFilters && useAsLocalFilters.length > 0) { var filter = { id: metadataColumn.getId(), columnId: metadataColumn.getId(), overrideHierarchyDefaultSelection: true, excludedValues: [], operator: 'in', type: null, binsLabel: metadataColumn.getLabel(), values: [] }; useAsLocalFilters.forEach(function (value) { filter.values.push({ d: value.memberCaption, u: value.id }); }); localFilters.push(filter); } }); var result = { type: 'live', data: { dataViews: [{ modelRef: payload.data.sourceId, dataItems: dataItems }] } }; if (localFilters.length > 0) { result.localFilters = localFilters; } // Go over the dataitems and insert the navpath id result.data.dataViews.forEach(function (dataView) { dataView.dataItems.forEach(function (dataItem) { dataItem.navigationPathId = navPathIds[dataItem.itemId] || null; }); }); return Promise.resolve(result); }; return MetadataDnD; }(); }); //# sourceMappingURL=MetadataDnD.js.map