'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(['../../../../lib/@waca/dashboard-common/dist/ui/interaction/Utils', '../../../../lib/@waca/core-client/js/core-client/ui/ProgressToast', '../../../../app/nls/StringResources', '../../../../dashboard/util/DashboardSpecHelper', '../../../../app/util/ErrorUtils', 'jquery', '../../../../lib/@waca/dashboard-common/dist/core/APIFactory', '../../../../lib/@waca/dashboard-common/dist/api/ContentActionsProviderAPI', 'underscore'], function (Util, ProgressToast, stringResources, DashboardSpecHelper, ErrorUtils, $, APIFactory, ContentActionsProviderAPI, _) { var placeholderMappings = { infographic: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHdpZHRoPSI2NHB4IiBoZWlnaHQ9IjY0cHgiIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiNBRUI4Qjg7fQ0KPC9zdHlsZT4NCjxnPg0KCTxjaXJjbGUgY3g9IjgiIGN5PSI4IiByPSI2Ii8+DQoJPGNpcmNsZSBjeD0iMjQiIGN5PSI4IiByPSI2Ii8+DQoJPGNpcmNsZSBjeD0iNDAiIGN5PSI4IiByPSI2Ii8+DQoJPGNpcmNsZSBjeD0iNTYiIGN5PSI4IiByPSI2Ii8+DQoJPGNpcmNsZSBjeD0iOCIgY3k9IjI0IiByPSI2Ii8+DQoJPGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iNiIvPg0KCTxjaXJjbGUgY3g9IjQwIiBjeT0iMjQiIHI9IjYiLz4NCgk8Y2lyY2xlIGN4PSI1NiIgY3k9IjI0IiByPSI2Ii8+DQoJPGNpcmNsZSBjeD0iOCIgY3k9IjQwIiByPSI2Ii8+DQoJPGNpcmNsZSBjeD0iMjQiIGN5PSI0MCIgcj0iNiIvPg0KCTxjaXJjbGUgY3g9IjQwIiBjeT0iNDAiIHI9IjYiLz4NCgk8Y2lyY2xlIGN4PSI1NiIgY3k9IjQwIiByPSI2Ii8+DQoJPGNpcmNsZSBjeD0iOCIgY3k9IjU2IiByPSI2Ii8+DQoJPGNpcmNsZSBjeD0iMjQiIGN5PSI1NiIgcj0iNiIvPg0KCTxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwIiBjeT0iNTYiIHI9IjYiLz4NCgk8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSI1NiIgY3k9IjU2IiByPSI2Ii8+DQo8L2c+DQo8L3N2Zz4NCg==' }; var PinAction = function () { function PinAction(_ref) { var features = _ref.features; _classCallCheck(this, PinAction); if (features) { this.dashboard = features.API; this.toast = {}; features.ContentActions.registerProvider('pin', this.getAPI()); this._icons = features.Icons; } } PinAction.prototype.getAPI = function getAPI() { if (!this._api) { this._api = APIFactory.createAPI(this, [ContentActionsProviderAPI]); } return this._api; }; PinAction.prototype.getLifeCycleHandlers = function getLifeCycleHandlers() { return [{ name: 'post:dashboard.initialize', action: this.postDashboardInitialize.bind(this) }]; }; PinAction.prototype.postDashboardInitialize = function postDashboardInitialize() { this.controller = this.dashboard.getFeature('InteractionController.internal'); this.specHelper = new DashboardSpecHelper(this.controller); return Promise.resolve(); }; PinAction.prototype._isEnabled = function _isEnabled(idList) { return idList.length && this._isSupportedVisualizations(idList) && this.dashboard.getMode() !== this.dashboard.MODES.EDIT_GROUP && ErrorUtils.hasCapability(this.dashboard, 'canAuthorDashboard'); }; PinAction.prototype._isSupportedVisualizations = function _isSupportedVisualizations(idList) { for (var index = 0; index < idList.length; index++) { if (this._isNotSupportedVisualization(idList[index])) { return false; } } return true; }; PinAction.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'; }; PinAction.prototype.getContentActionList = function getContentActionList(idList) { if (this._isEnabled(idList)) { return [{ name: 'pin', label: stringResources.get('toolbarActionPinOld'), icon: this._icons.getIcon('pin').id, type: 'Button', actions: { apply: this.pinItems.bind(this) } }]; } else { return []; } }; PinAction.prototype.pinItems = function pinItems() { var _this = this; return new Promise(function (resolve, reject) { var _pinItems = function _pinItems(toast_id) { var promises = []; var boardName = _this.controller.boardModel.name; var path = _this._createPath(); var pinContents = _this.specHelper.getContents(true); pinContents.forEach(function (pinContent) { var pin = { source: 'authoredview', sourceName: boardName, sourceUri: path + '?embed=ba1', // source uri needs embed link for reopen sourceInstanceId: path, contentType: 'boardFragment', content: pinContent }; if (_this._shouldUsePlaceholder(pinContent.widgets)) { pin.thumbUri = _this._getPlaceholder(pinContent.widgets); _this._pinItem(pin); } else { var isGroup = pinContent.layout.type === 'group'; // TODO lifecycle_cleanup -- cleanup how we access the dom here var selectedNode = $('#' + pinContent.layout.id)[0]; var widgetContent = selectedNode; if (!isGroup) { widgetContent = $(widgetContent).find('.widgetContentWrapper')[0]; } var nodes = { widget: selectedNode, content: widgetContent }; var nodeStyles = {}; _this._prepareNodeStylesForThumbnail(nodes, nodeStyles); promises.push(_this._createThumbnail(widgetContent).then(function (dataUri) { pin.thumbUri = dataUri; _this._restoreStylesAfterThumbnail(nodes, nodeStyles); }, function (err) { _this.dashboard.getGlassCoreSvc('.Logger').error(err); }).then(_this._pinItem.bind(_this, pin))); } }); return Promise.all(promises).then(function () { _this.toast[toast_id].setComplete(100, { duration: 0, completeMsg: stringResources.get('pinAddedToast'), isComplete: true }); resolve(); }).catch(function () { _this.toast[toast_id].fail(stringResources.get('contentPinFailOld')); reject(); }).finally(function () { _this.toast[toast_id].remove(); _this.toast[toast_id] = null; }); }; var toast_id = _.uniqueId('pinToast'); var toast = new ProgressToast({ noCancelBtn: true, onShown: _pinItems.bind(_this, toast_id) }); toast.show(stringResources.get('pinningToast')); toast.indefinite(stringResources.get('pinningToast')); _this.toast[toast_id] = toast; }); }; PinAction.prototype._createPath = function _createPath() { var gateway = this.controller.gatewayUrl ? this.controller.gatewayUrl : ''; var boardID = this.controller.boardModel.id; return gateway + '/board/' + boardID; }; /** * Determines if a placeholder should be used for a given list of widget models * @param widgetModelsForPinning - List of widget models * @returns boolean value as to whether a placeholder should be used */ PinAction.prototype._shouldUsePlaceholder = function _shouldUsePlaceholder(widgetModelsForPinning) { return widgetModelsForPinning.length === 1 && widgetModelsForPinning[0].mapping && widgetModelsForPinning[0].mapping[0] && widgetModelsForPinning[0].mapping[0].graphic; }; /** * Gets the placeholder image to be shown for pinning, for the given widget model * @param widgetModelsForPinning - List of widget models * @returns placeholder (base 64 string) to be shown for pinning */ PinAction.prototype._getPlaceholder = function _getPlaceholder(widgetModelsForPinning) { var placeholder; if (widgetModelsForPinning.length === 1 && widgetModelsForPinning[0].mapping && widgetModelsForPinning[0].mapping[0] && widgetModelsForPinning[0].mapping[0].graphic) { placeholder = placeholderMappings.infographic; } return placeholder; }; PinAction.prototype._pinItem = function _pinItem(item) { return this.dashboard.getGlassSvc('.DashboardPinning').then(function (dashboardPinningService) { return dashboardPinningService.addPin(item); }); }; PinAction.prototype._prepareNodeStylesForThumbnail = function _prepareNodeStylesForThumbnail(nodes, styles) { if (nodes.widget !== nodes.content) { styles.widget = nodes.widget.getAttribute('style') || ''; styles.content = nodes.content.getAttribute('style') || ''; var tempWidgetStyles = [], tempContentStyles = []; styles.widget.split(';').forEach(function (styleRule) { var ruleName = styleRule.split(':')[0]; switch (ruleName.trim()) { case 'width': case 'height': case 'top': case 'left': tempWidgetStyles.push(styleRule); break; default: tempContentStyles.push(styleRule); } }); nodes.widget.setAttribute('style', tempWidgetStyles.join(';')); nodes.content.setAttribute('style', styles.content + ';' + tempContentStyles.join(';')); } $(nodes.widget).addClass('pinThumbnail'); }; PinAction.prototype._createThumbnail = function _createThumbnail(selectedNode) { return this.dashboard.getDashboardSvc('.Thumbnail').then(function (thumbnailSvc) { return thumbnailSvc.generateImage(selectedNode); }); }; PinAction.prototype._restoreStylesAfterThumbnail = function _restoreStylesAfterThumbnail(nodes, styles) { if (nodes.widget !== nodes.content) { nodes.widget.setAttribute('style', styles.widget); nodes.content.setAttribute('style', styles.content); } $(nodes.widget).removeClass('pinThumbnail'); }; return PinAction; }(); return PinAction; }); //# sourceMappingURL=PinAction.js.map