123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- '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. 2020
- * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- */
- /**
- * @class VisDndLiveWidgetProvider
- * @hideconstructor
- *
- * @classdesc Handles drag and drop of metadata to create a visualization.
- */
- define(['underscore', 'jquery', 'dashboard-analytics/widgets/livewidget/nls/StringResources'], function (_, $, StringResources) {
- return function () {
- function VisDndLiveWidgetProvider() {
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- _classCallCheck(this, VisDndLiveWidgetProvider);
- this.dashboardAPI = options.dashboardAPI;
- this.dashboardDnD = options.dashboardDnD;
- this.content = options.content;
- this.visualization = options.visualization;
- this.state = options.state;
- this.visRecommender = options.visRecommender;
- this.visDnDUtils = options.visDnDUtils;
- this.transaction = options.transaction;
- }
- VisDndLiveWidgetProvider.prototype.destroy = function destroy() {
- this.dashboardAPI = null;
- this.dashboardDnD = null;
- this.content = null;
- this.visualization = null;
- this.state = null;
- this.visRecommender = null;
- this.visDnDUtils = null;
- this.transaction = null;
- };
- VisDndLiveWidgetProvider.prototype.isInvalidVisDefinition = function isInvalidVisDefinition(target) {
- var $errorContainer = $(target.info.node).find('.vis-sdk-error-container-wrapper');
- if ($errorContainer.length > 0) {
- return true;
- }
- var definition = this.visualization.getDefinition();
- return definition && definition.getState().getError() !== undefined;
- };
- /**
- * Adds the model filters among the mappings to the local filters.
- * @param metadataColumns an array of metadataColumns to be added to the visualization
- * @returns remaining mappings that are not a model filter
- */
- VisDndLiveWidgetProvider.prototype.addModelFilters = function addModelFilters(metadataColumns, transactionToken) {
- var modelFilters = [];
- var nonFilterMetadataColumns = _.filter(metadataColumns, function (metadataColumn) {
- if (metadataColumn.isFilter()) {
- modelFilters.push(metadataColumn.getId());
- return false;
- }
- return true;
- });
- if (modelFilters.length > 0) {
- this._setModelFilter(modelFilters, transactionToken);
- }
- return nonFilterMetadataColumns;
- };
- VisDndLiveWidgetProvider.prototype._setModelFilter = function _setModelFilter(modelfilterId, transactionToken) {
- var localFilters = this.visualization.getLocalFilters();
- modelfilterId = $.isArray(modelfilterId) ? modelfilterId : [modelfilterId];
- _.each(modelfilterId, function (id) {
- var itemContext = {
- id: id,
- itemId: id,
- filterType: 'filter'
- };
- localFilters.addFilter(itemContext, {} /* filterContext */, transactionToken);
- });
- };
- VisDndLiveWidgetProvider.prototype._addFiltersForMembers = function _addFiltersForMembers(filterSpecs, visualization, transactionToken) {
- if (!filterSpecs.length) {
- return;
- }
- var localFilters = visualization.getLocalFilters();
- var dataItemList = visualization.getSlots().getDataItemList();
- filterSpecs.forEach(function (spec) {
- //if dataItem is added to slot or visualization, then add filters,
- // if dataItem is not added due to any reason, do not add filters
- var filterColumnId = spec.itemContext.itemId;
- var dataItem = dataItemList.find(function (dataItem) {
- return dataItem.getColumnId() === filterColumnId;
- });
- if (dataItem) {
- if (spec.hasFilters) {
- localFilters.editFilter(spec.itemContext, spec.filterContext, transactionToken);
- } else {
- localFilters.addFilter(spec.itemContext, spec.filterContext, transactionToken);
- }
- }
- });
- };
- VisDndLiveWidgetProvider.prototype.supports = function supports(source, target) {
- return target.type === 'widget.live' && source.type !== 'widget';
- };
- VisDndLiveWidgetProvider.prototype.accepts = function accepts(source, target) {
- if (target && target.type === 'widget.live') {
- if (this.isInvalidVisDefinition(target)) {
- //No definitions so do not all metadata drag and drop
- return false;
- }
- if (this.content) {
- if (this.state && this.state.getError()) {
- return false;
- }
- }
- if ($(target.info.node).hasClass('liveWidgetPreview')) {
- return false;
- }
- if (this.content) {
- return this.visDnDUtils.accepts(source, target);
- }
- }
- return false;
- };
- VisDndLiveWidgetProvider.prototype.onDrop = function onDrop(source, target) {
- var _this = this;
- if (target.type !== 'widget.live') {
- return;
- }
- var visDef = this.visualization.getDefinition();
- if (visDef.getState().getError()) {
- return;
- }
- if (!this.visExpandMode || this.visExpandMode && !this.visExpandMode.onDrop(source)) {
- if (this.visRecommender) {
- var metadataPayload = this.visDnDUtils.onDrop(source);
- var droppedColumns = metadataPayload.columns;
- if (!this.visDnDUtils.validateSupportsOLAP(droppedColumns.map(function (c) {
- return c.metadataColumn;
- }))) {
- this.dashboardAPI.getFeature('Notification').setMessage(StringResources.get('visualizationDoesNotSupportOLAP'));
- return;
- }
- var metadataColumns = _.pluck(droppedColumns, 'metadataColumn');
- var transactionToken = this.transaction.startTransaction();
- // We add model filters first
- metadataColumns = this.addModelFilters(metadataColumns, transactionToken);
- var filterSpecsForMembers = [];
- if (metadataColumns.length) {
- filterSpecsForMembers = this.visDnDUtils.addMembersAsLocalFilters({
- visualizationAPI: this.visualization,
- columns: metadataPayload.columns,
- doUpdateFilters: false
- }, transactionToken);
- metadataColumns = _.pluck(droppedColumns, 'metadataColumn');
- }
- var endTransaction = function endTransaction() {
- // Add the filters for items that are add as dataitems
- _this._addFiltersForMembers(filterSpecsForMembers, _this.visualization, transactionToken);
- _this.transaction.endTransaction(transactionToken);
- };
- if (metadataColumns.length > 0) {
- var sourceId = source.data.sourceId;
- var dataSource = this.visualization.getDataSource();
- // Create a transcation so that we can bundle the dataSource id change with the mapping
- if (!dataSource || dataSource.getId() != sourceId) {
- this.visualization.setDataSource(sourceId, transactionToken);
- }
- // The viz might not support the datasource so it might not be set
- var isDataSourceSet = !!this.visualization.getDataSource();
- if (isDataSourceSet) {
- // remove all filters
- var dataItems = metadataColumns.filter(function (mc) {
- return !mc.isFilter();
- }).map(function (column) {
- return {
- columnId: column.getId()
- };
- });
- this.visRecommender.addDataItems(dataItems, transactionToken).finally(function () {
- endTransaction();
- });
- } else {
- endTransaction();
- }
- } else {
- endTransaction();
- }
- }
- }
- };
- return VisDndLiveWidgetProvider;
- }();
- });
- //# sourceMappingURL=VisDndLiveWidgetProvider.js.map
|