123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- '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 Cognos Products: BI Cloud (C) Copyright IBM Corp. 2019, 2020
- * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- */
- define(['../../../../app/nls/StringResources', '../../../../lib/@waca/dashboard-common/dist/ui/interaction/Utils', 'jquery', 'underscore', '../../../../lib/@waca/dashboard-common/dist/core/APIFactory', '../../../../lib/@waca/dashboard-common/dist/api/ContentActionsProviderAPI'], function (stringResources, Utils, $, _, APIFactory, ContentActionsProviderAPI) {
- var DuplicateAction = function () {
- function DuplicateAction(_ref) {
- var features = _ref.features;
- _classCallCheck(this, DuplicateAction);
- if (features) {
- this.dashboard = features.API;
- features.ContentActions.registerProvider('duplicate', this.getAPI());
- this._dashboardState = features.DashboardState;
- this._icons = features.Icons;
- }
- }
- DuplicateAction.prototype.getAPI = function getAPI() {
- if (!this._api) {
- this._api = APIFactory.createAPI(this, [ContentActionsProviderAPI]);
- }
- return this._api;
- };
- DuplicateAction.prototype.getLifeCycleHandlers = function getLifeCycleHandlers() {
- return [{
- name: 'post:dashboard.initialize',
- action: this.postDashboardInitialize.bind(this)
- }];
- };
- DuplicateAction.prototype.postDashboardInitialize = function postDashboardInitialize() {
- if (this.dashboard) {
- this.controller = this.dashboard.getFeature('InteractionController.internal');
- }
- return Promise.resolve();
- };
- DuplicateAction.prototype.destroy = function destroy() {
- this.dashboard = null;
- this.controller = null;
- };
- DuplicateAction.prototype.getNodes = function getNodes(idList) {
- return Utils.getNodes(this.controller, idList);
- };
- DuplicateAction.prototype._isAvailable = function _isAvailable(idList) {
- // Make sure duplicate action is not available for filter widget
- return idList.length && this._isSupportedVisualizations(idList) && this.dashboard.getMode() === this.dashboard.MODES.EDIT && _.find(this.getNodes(idList), function (n) {
- return $(n).hasClass('filterWidget');
- }) === undefined;
- };
- DuplicateAction.prototype._isSupportedVisualizations = function _isSupportedVisualizations(idList) {
- for (var index = 0; index < idList.length; index++) {
- if (this._isNotSupportedVisualization(idList[index])) {
- return false;
- }
- }
- return true;
- };
- DuplicateAction.prototype._isNotSupportedVisualization = function _isNotSupportedVisualization(id) {
- var content = this.dashboard.getCanvas().getContent(id);
- if (!content) {
- return false;
- }
- var visualization = content.getFeature('Visualization');
- return content.getType() === 'widget.live' && visualization && visualization.getDefinition().getId() === 'com.ibm.vis.schematicsPreview';
- };
- DuplicateAction.prototype._isDisabled = function _isDisabled() {
- return this._dashboardState.getUiState().focus;
- };
- DuplicateAction.prototype.getContentActionList = function getContentActionList(idList) {
- if (this._isAvailable(idList)) {
- return [{
- name: 'duplicate',
- label: stringResources.get('duplicate'),
- icon: this._icons.getIcon('dashboard-duplicate').id,
- type: 'Button',
- disabled: this._isDisabled.bind(this),
- actions: {
- apply: this.duplicateContent.bind(this, idList)
- }
- }];
- }
- return [];
- };
- /**
- * Duplicate the selected items for the board layout
- * @param {String[]} idList Array of model id list.
- */
- DuplicateAction.prototype.duplicateContent = function duplicateContent(idList, evt) {
- var _this = this;
- var modelIds = [];
- var outBoundIds = [];
- //Get view port bounds
- var viewPortView = this.controller.layoutController.getLayoutContentContainer();
- _.each(this.getNodes(idList), function (node) {
- var modelId = this.controller.layoutController.nodeIdToModelId(node.id);
- var bounds = this._checkLayoutBoundLimits(node, viewPortView);
- if (!bounds.right || !bounds.bottom) {
- outBoundIds.push({ 'id': modelId, 'right': bounds.right, 'bottom': bounds.bottom });
- }
- modelIds.push(modelId);
- }.bind(this));
- var options = {
- modelIds: modelIds
- };
- if (outBoundIds.length > 0) {
- options.outBoundIds = outBoundIds;
- }
- var duplicatedIdsPromise = this.controller.boardModel.duplicateSelection(options);
- this.controller.selectionHandler.deselectAll();
- var returnedPromise = [];
- duplicatedIdsPromise.forEach(function (duplicatedIdPromise) {
- return returnedPromise.push(duplicatedIdPromise.then(function (duplicatedId) {
- return _this.controller.layoutController.selectLayouts([duplicatedId], evt);
- }).catch(function (err) {
- console.log(err);
- }));
- });
- return returnedPromise;
- };
- /**
- * Check if duplicate item will fall out of bound of the current consume view
- * Only applies for Guided Journey layouts
- */
- DuplicateAction.prototype._checkLayoutBoundLimits = function _checkLayoutBoundLimits(node, viewPort) {
- var shouldExpand = { right: true, bottom: true };
- /* Get current consume view bounds */
- var consumViewMaxHeight = node._layout.parentLayout.getMaximumHeight();
- var consumViewMaxWidth = node._layout.parentLayout.getMaximumWidth();
- /* Only in GJ will the numbers being finite*/
- if (isFinite(consumViewMaxHeight) && isFinite(consumViewMaxWidth)) {
- /* Get the view port bounds */
- var viewPortMaxHeight = viewPort.clientHeight;
- var viewPortMaxWidth = viewPort.clientWidth;
- /* Should be finite. Check just in case */
- if (isFinite(viewPortMaxHeight) && isFinite(viewPortMaxWidth)) {
- /* Get the styles from layout model for this widget */
- var layOutModel = node._layout.model;
- var style = layOutModel.style;
- if (style) {
- /*
- * Calculate the bounds based on a 5% down/right move of the current node
- * The style contains % of the view port space, not the consume view
- */
- var expectedTop = parseFloat(layOutModel.incrementStyleValue(style.top)) / 100 * viewPortMaxHeight;
- var expectedLeft = parseFloat(layOutModel.incrementStyleValue(style.left)) / 100 * viewPortMaxWidth;
- /* Height and Width of this object */
- var objHeight = parseFloat(style.height) / 100 * viewPortMaxHeight;
- var objWidth = parseFloat(style.width) / 100 * viewPortMaxWidth;
- if (expectedTop + objHeight > consumViewMaxHeight) {
- shouldExpand.bottom = false;
- }
- if (expectedLeft + objWidth > consumViewMaxWidth) {
- shouldExpand.right = false;
- }
- }
- }
- }
- return shouldExpand;
- };
- return DuplicateAction;
- }();
- return DuplicateAction;
- });
- //# sourceMappingURL=DuplicateAction.js.map
|