123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- 'use strict';
- /**
- * Licensed Materials - Property of IBM
- * IBM Cognos Products: dashboard-core (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(['./SaveActionHandler', '../../../dashboard/glass/util/SaveActionUtil', '../../../app/util/ErrorUtils', '../../../app/util/GlassUtil'], function (BaseClass, SaveActionUtil, ErrorUtils, GlassUtil) {
- var ActionHandler = BaseClass.extend({
- onSelectItem: function onSelectItem(context) {
- var contentView = this.getContentView(context);
- var id = contentView.getBoardId();
- this.saveAsTemplate(context, id);
- },
- isItemVisible: function isItemVisible(context) {
- var isDashboardTemplatesEnabled = !context.glassContext.getCoreSvc('.FeatureChecker').checkValue('dashboard', 'dashboardTemplates', 'disabled');
- return isDashboardTemplatesEnabled && this._isBoardTypeSupported(context) && ErrorUtils.hasCapability(context.glassContext, 'canAuthorDashboard');
- },
- _isBoardTypeSupported: function _isBoardTypeSupported(context) {
- var view = this.getContentView(context);
- return view.getDashboardApi().getType() === 'dashboard';
- },
- /**
- * Prompt the user for a location to save the dashboard template.
- * @param {Object} context of selection (passed during onSelect)
- * @param {string} id The Board Id that we are creaing a template from
- */
- saveAsTemplate: function saveAsTemplate(context, id) {
- var _this = this;
- var dashboardView = this.getDashboardView(context);
- return this._getAncestors(context, id).then(function (ancestors) {
- return context.glassContext.getSvc('.ContentDialogFactory').then(function (dialogFactory) {
- var stringResources = _this.getStringResourcesService(context);
- _this._saveAsTemplateDialog = dialogFactory.createSaveAsDialog({
- glassContext: context.glassContext,
- defaultFileName: stringResources.get('dashboard_template_prefix', { name: dashboardView.boardModel.name }),
- service: {
- context: context,
- save: _this.onSaveAsTemplate.bind(_this)
- },
- ancestors: ancestors
- });
- _this._saveAsTemplateDialog.open();
- });
- });
- },
- onSaveAsTemplate: function onSaveAsTemplate(service, selection, name, overwrite) {
- return this._executeSaveAsTemplateRequest(service.context, selection.url, name, overwrite).then(this._onSaveAsTemplateSuccess.bind(this), this._onSaveAsError.bind(this, service.context)).finally(this._saveAsTemplateDialog.hide.bind(this._saveAsTemplateDialog));
- },
- _onSaveAsTemplateSuccess: function _onSaveAsTemplateSuccess(params) {
- var _this2 = this;
- var context = params.context;
- var glassContext = context.glassContext;
- return glassContext.appController.openAppView('dashboardTemplate', {
- perspective: 'dashboardTemplate',
- content: {
- perspective: 'dashboardTemplate',
- objectUrl: params.saveRequest.getResponseHeader('location'),
- isAuthoringMode: glassContext.appController.getCurrentContentView().isAuthoringMode
- }
- }).then(function () {
- var stringResources = _this2.getStringResourcesService(context);
- var contentView = _this2.getContentView(context);
- var id = contentView.getBoardId();
- // Remove any filter widgets - ideally, this should be done before the template spec is saved to CM,
- // but there's no dashboard api until the view is opened, once this is available - update this
- var canvas = contentView.getDashboardApi().getCanvas();
- var filterWidgets = canvas.findContent({ type: 'widget' }).filter(function (widget) {
- return widget.getType() === 'widget.filter';
- });
- if (filterWidgets.length) {
- filterWidgets.forEach(function (widget) {
- canvas.removeContent(widget.getId());
- });
- glassContext.appController.showToast(stringResources.get('dashboard_template_filters_removed'), { type: 'warning' });
- _this2.save(context, true, false);
- }
- // Ensure widgets of current tab have rendered before taking screen shot
- var widgets = canvas.getContent(contentView.boardModel.getSelectedLayout()).findContent({ type: 'widget' });
- var widgetStatePromises = widgets.map(function (widget) {
- var state = widget.getFeature('state');
- return state.whenStatusChanges(state.STATUS.RENDERED);
- });
- return Promise.all(widgetStatePromises).then(function () {
- return _this2._saveThumbnail(context, id).catch(function (err) {
- glassContext.getCoreSvc('.Logger').error(err);
- });
- }).then(function () {
- glassContext.appController.showToast(stringResources.get('dashboard_template_save_success'));
- });
- });
- },
- /**
- * Send a create request to create a new dashboard template in CM
- * @return {Promise} Resolve when save succeeds; reject when save fails
- */
- _executeSaveAsTemplateRequest: function _executeSaveAsTemplateRequest(context, url, name, overwrite) {
- var _this3 = this;
- var glassContext = context.glassContext;
- var ajaxSvc = GlassUtil.getAjaxService(glassContext);
- var dashboardView = this.getDashboardView(context);
- var dashboard = dashboardView.getDashboardApi();
- var convertToTemplate = dashboard.getFeature('ConvertToTemplate');
- var spec = dashboard.getFeature('Serializer').toJSON();
- SaveActionUtil.cleanUnusedCustomColors(dashboard, spec, dashboardView.boardModel);
- if (name) {
- spec.name = name;
- }
- return new Promise(function (resolve, reject) {
- convertToTemplate.convertToTemplate(spec).then(function (templateSpec) {
- var cmSpec = _this3._getCMSpec(templateSpec, context);
- url = url + (overwrite ? '?updateAction=replace&ignoreInvalidObjectReference=true' : '?ignoreInvalidObjectReference=true');
- ajaxSvc.post(url, {
- contentType: 'application/json',
- processData: false,
- dataType: 'text',
- data: JSON.stringify(cmSpec)
- }).done(function (data, status, response) {
- resolve({
- 'saveRequest': response,
- 'context': context
- });
- }).fail(function (ajaxRequestDeferred, response) {
- reject({
- 'saveRequest': response,
- 'cmSpec': spec,
- 'glassContext': glassContext
- });
- });
- });
- });
- },
- _getCMSpec: function _getCMSpec(spec, context) {
- var templateSpec = Object.assign(spec, { dataSources: {} });
- var contentView = this.getContentView(context);
- var dashboard = contentView.getDashboardApi();
- var cmSpec = {
- defaultName: templateSpec.name,
- type: SaveActionUtil.getAssetType(dashboard),
- specification: JSON.stringify(templateSpec),
- tags: ['dashboard_template']
- };
- return cmSpec;
- }
- });
- return ActionHandler;
- });
- //# sourceMappingURL=SaveAsTemplateActionHandler.js.map
|