123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- 'use strict';
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- define(['underscore', './util/DashboardSpecHelper', '../app/nls/StringResources'], function (_, DashboardSpecHelper, StringResources) {
- return function () {
-
- function CopyPasteController(options) {
- _classCallCheck(this, CopyPasteController);
- this.layoutController = options.layoutController;
- this.dashboardApi = options.dashboardApi;
- this.logger = options.logger;
- this.model = options.model;
- this.api = options.api;
- this.specType = options.type || 'DASHBOARD';
- this.clipboard = this.dashboardApi.getGlassCoreSvc('.Clipboard');
- }
- CopyPasteController.prototype.destroy = function destroy() {
- this.layoutController = null;
- this.dashboardApi = null;
- this.logger = null;
- this.model = null;
- this.api = null;
- this.clipboard = null;
- };
- CopyPasteController.prototype.getSpecHelper = function getSpecHelper() {
- var _this = this;
- if (this.specHelper) {
- return Promise.resolve(this.specHelper);
- }
- return this.layoutController.getInteractionController().then(function (controller) {
- _this.specHelper = new DashboardSpecHelper(controller);
- return _this.specHelper;
- });
- };
-
- CopyPasteController.prototype.doCopy = function doCopy(overwriteSpec) {
- var _this2 = this;
- return this.getSpecHelper().then(function (specHelper) {
- var currentTime = new Date().getTime(),
- sharedSpecObj = void 0;
- var overwriteSpecIsValid = function overwriteSpecIsValid(spec) {
- return spec && spec.type !== 'DASHBOARD' && spec.count;
- };
-
- if (overwriteSpecIsValid(overwriteSpec)) {
- sharedSpecObj = overwriteSpec;
- } else {
- sharedSpecObj = _this2.selectFromSpecForCopyPaste(specHelper);
- sharedSpecObj.type = _this2.specType;
- }
- sharedSpecObj.timestamp = currentTime;
- return _this2.clipboard.set(sharedSpecObj).then(function () {
- if (sharedSpecObj.errMsg) {
- _this2._showToast(sharedSpecObj.errMsg);
- }
- if (sharedSpecObj.count > 0) {
- return _this2._showToast('copy', { count: sharedSpecObj.count });
- }
- return null;
- });
- }).catch(function (err) {
- return _this2._showError('specCopyErr', err);
- });
- };
-
- CopyPasteController.prototype.doPaste = function doPaste(overwriteTarget) {
- var _this3 = this;
- if (overwriteTarget) {
- return this.getConvertedSpec(overwriteTarget).then(function (spec) {
- return spec;
- }).catch(function (err) {
- return _this3._showError('specConvertErr', err);
- });
- }
- return this.getConvertedSpec(this.specType).then(function (spec) {
- if (!spec) return;
- return _this3.getSpecHelper().then(function (specHelper) {
- return specHelper.validateDashboardSpec(spec);
- });
- }).then(function (spec) {
- if (!spec) return;
-
- _this3.layoutController.interactionController.selectionHandler.deselectAll();
- return _this3._performPaste(spec);
- }).catch(function (err) {
- return _this3._showError('specConvertErr', err);
- });
- };
-
- CopyPasteController.prototype.getConvertedSpec = function getConvertedSpec(target) {
- var _this4 = this;
- return this.clipboard.get().then(function (spec) {
- return _this4._doConvert(spec, target);
- });
- };
- CopyPasteController.prototype._doConvert = function _doConvert(spec, target) {
- var src = spec.type;
- var data = spec.spec;
- if (src == 'REPORT') {
- this._showError('pasteNotSupportedErr', { name: StringResources.get('reportParam') });
- return null;
- }
- return src === target || !data ? Promise.resolve(data) : this.dashboardApi.getGlassSvc('.ConversionService').then(function (srvc) {
- return srvc.convert(src, target, data);
- });
- };
-
- CopyPasteController.prototype.selectFromSpecForCopyPaste = function selectFromSpecForCopyPaste(specHelper) {
- var returnObject = {
- spec: null,
- count: 0
- };
- var selectedContent = this.dashboardApi.getCanvas().getSelectedContentList();
- if (selectedContent.length) {
- returnObject = specHelper.getContentsToJSONSpec();
- }
- return returnObject;
- };
-
- CopyPasteController.prototype._performPaste = function _performPaste(spec) {
- var _this5 = this;
- if (spec.nonMergedWidgets) {
- spec.widgets = spec.nonMergedWidgets;
- delete spec.nonMergedWidgets;
- }
-
-
-
-
- var getLayout = function getLayout(idx) {
- return idx < spec.layout.length ? spec.layout[idx] : undefined;
- };
- var findObj = function findObj(ary, id) {
- return _.find(ary, function (ele) {
- return id === ele.id;
- });
- };
- function findSource(widget, sourceMap) {
- if (widget.data && widget.data.dataViews) {
- _.each(widget.data.dataViews, function (view) {
- var newSource = _.find(spec.dataSources.sources, function (source) {
- return source.id === view.modelRef;
- });
- sourceMap[view.modelRef] = newSource;
- });
- }
- }
-
- function findWidget(id, widgets, sourceMap) {
- var widget = findObj(spec.widgets, id);
- if (widget) {
-
- findSource(widget, sourceMap);
- widgets.push(widget);
- }
- }
-
- function findWidgets(items, widgets, sourceMap) {
- _.each(items, function (item) {
- return item.items ? findWidgets(item.items, widgets, sourceMap) : findWidget(item.id, widgets, sourceMap);
- });
- }
-
-
-
- var getFragment = function getFragment(layout) {
- var fragmentModel = {};
- var content = null;
- if (_this5._isTypeRegistered(layout.type)) {
- content = layout;
- } else {
- fragmentModel.layout = layout;
-
- if (spec.widgets && spec.widgets.length) {
- var widgets = [];
- var sourceMap = {};
-
- if (layout.items) {
- findWidgets(layout.items, widgets, sourceMap);
- } else {
- findWidget(layout.id, widgets, sourceMap);
- }
- if (widgets.length) {
- fragmentModel.widgets = widgets;
- fragmentModel.dataSources = {
- version: spec.dataSources.version,
- sources: _.values(sourceMap)
- };
-
-
- if (layout.content && layout.content.properties) {
- var contentProperties = Object.keys(layout.content.properties);
- if (contentProperties.indexOf('explicitScale') !== -1) {
- delete layout.content.properties['explicitScale'];
- }
- }
- }
- }
- if (spec.drillThrough && spec.drillThrough.length) {
- fragmentModel.drillThrough = spec.drillThrough;
- }
- if (spec.properties) {
- fragmentModel.properties = spec.properties;
- }
- if (spec.fredIsRed) {
- fragmentModel.fredIsRed = spec.fredIsRed;
- }
- if (spec.episodes) {
- fragmentModel.episodes = spec.episodes;
- }
- }
-
- return {
- content: content,
- model: fragmentModel
- };
- };
-
- var apply = function apply(idx, transactionToken) {
- var layout = getLayout(idx);
- if (layout) {
- var fragment = getFragment(layout);
- fragment.copyPaste = true;
-
- if (fragment && (fragment.content || fragment.model && fragment.model.layout)) {
- return _this5.dashboardApi.getFeature('Canvas').addContent({ spec: fragment.content || fragment.model, copyPaste: true }, transactionToken).then(function (content) {
- var layoutModelId = content.getId();
-
-
- return _this5.layoutController.whenWidgetRenderComplete(layoutModelId).then(function (layout) {
-
- _this5.layoutController.interactionController.selectionHandler.selectNode(layout.domNode, {
- isTouch: false
- });
- });
- });
- } else {
- return Promise.reject(new Error('Unable to complete pasting of widget(s). Can not determine the layout fragment'));
- }
- } else {
- return Promise.reject(new Error('Unable to complete pasting of widget(s). Checking for a layout that is not there'));
- }
- };
-
- if (spec) {
- if (spec.layout) {
- var promises = [];
-
- var transaction = this.dashboardApi.getFeature('Transaction');
- var transactionToken = transaction.startTransaction();
- for (var i = 0; i < spec.layout.length; i++) {
- promises.push(apply(i, transactionToken));
- }
- transaction.endTransaction(transactionToken);
- return Promise.all(promises);
- } else {
- return Promise.resolve();
- }
- } else {
- return Promise.resolve();
- }
- };
- CopyPasteController.prototype._isTypeRegistered = function _isTypeRegistered(type) {
- var contentTypeRegistry = this.dashboardApi.getFeature('ContentTypeRegistry');
- return contentTypeRegistry.isTypeRegistered(type);
- };
-
- CopyPasteController.prototype._showError = function _showError(errKey, err) {
- this.logger.error(StringResources.get(errKey), err);
- return this._showToast(errKey, err, {
- type: 'error',
- 'preventDuplicates': true
- });
- };
-
- CopyPasteController.prototype._showToast = function _showToast(strServiceKey, strParams, toastParams) {
- var toastMsg = !strParams ? StringResources.get(strServiceKey) : StringResources.get(strServiceKey, strParams);
- return this.dashboardApi.showToast(toastMsg, toastParams);
- };
- return CopyPasteController;
- }();
- });
|