123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- 'use strict';
- /*
- *+------------------------------------------------------------------------+
- *| Licensed Materials - Property of IBM
- *| IBM Cognos Products: Dashboard
- *| (C) Copyright IBM Corp. 2018, 2020
- *|
- *| US Government Users Restricted Rights - Use, duplication or disclosure
- *| restricted by GSA ADP Schedule Contract with IBM Corp.
- *+------------------------------------------------------------------------+
- */
- define(['underscore', './BaseTask'], function (_, BaseTask) {
- 'use strict';
- var renderErrors = {
- 'ENGINE_LAYOUT_DOES_NOT_FIT': 'dwErrorVisualizationTooSmall'
- };
- var RESERVED_CONTEXT_KEYS = ['id', 'extraInfo'];
- var RenderTask = BaseTask.extend({
- /**
- * Final render task. Call the view to render the visualization.
- * @param renderContext - information collected by a particular call to render or reRender (such as the view, control, data etc).
- * @returns a promise
- */
- process: function process(renderContext) {
- this._logRenderContext('_render:ContextStepsComplete', renderContext);
- var isAnnotationRequest = renderContext.extraInfo && renderContext.extraInfo.annotationRequest;
- if (this._isStepComplete(renderContext, 'render') || isAnnotationRequest) {
- this._completeStep(renderContext, 'render', this.getRenderState());
- return Promise.resolve(renderContext);
- }
- return this.render(renderContext);
- },
- render: function render(renderContext) {
- var bResizing = renderContext.resizing;
- delete renderContext.resizing;
- var result = void 0;
- var renderState = this.getRenderState();
- var isRealTimeRefresh = renderContext.extraInfo && renderContext.extraInfo.sender === 'realtimeRefresh';
- if (!renderState.readyToRender()) {
- // This may happen when resize occurs prematurely along with the main render
- // Since we are not ready to render, we have no choice but to terminate render
- // However we should NOT make a false claim that render has completed
- // the state of the render will eventually get updated by the subsequent render request
- result = Promise.resolve(renderContext);
- } else if (renderContext.sameQueryData === true && isRealTimeRefresh) {
- renderContext.renderComplete = true;
- this.visAPI.renderComplete();
- result = Promise.resolve(renderContext);
- } else {
- this.clearError();
- result = this.ownerWidget.getVisBounds().then(function (bounds) {
- var _this = this;
- this._logRenderContext('_render:visBoundReady', renderContext);
- if (renderState.readyToRender()) {
- renderState.lastSizeRendered = bounds;
- _.each(_.keys(renderContext), function (key) {
- if (!_this._isReservedContextKey(key) && renderState.getCurrentContext(key)) {
- renderContext[key] = renderState.getCurrentContext(key)[key];
- }
- });
- renderContext.widgetSize = bounds;
- var visView = this.getRenderState().getCurrentContextData('visView');
- visView.show();
- try {
- visView.resizing = bResizing;
- return visView.render(renderContext).then(function (result) {
- if (result && result.reRenderNeeded) {
- _this.ownerWidget.setReRenderOnShow({
- resizing: true
- });
- renderContext.renderComplete = false;
- return renderContext;
- }
- _this._completeStep(renderContext, 'render', renderState);
- renderState.firstRenderComplete = true;
- renderContext.renderComplete = true;
- //The render is completed so ensure the renderingNewData flag is reset prior to the next render.
- visView.setRenderingNewData(false);
- //refresh property panel when re-render happens, no need to refreh the panel if the rerender is triggered by resizing or auto-refresh
- var isAutoRefresh = renderContext && renderContext.extraInfo && renderContext.extraInfo.sender === 'realtimeRefresh';
- var refreshPropertiesPane = renderContext && renderContext.refresh && renderContext.refresh.propertiesPane;
- refreshPropertiesPane = refreshPropertiesPane || refreshPropertiesPane === undefined && renderContext.refreshAll;
- if (refreshPropertiesPane && _this.ownerWidget.focusOn && !bResizing && !isAutoRefresh) {
- _this.ownerWidget.refreshPropertiesPane();
- }
- return renderContext;
- }).catch(function (e) {
- this._showRenderError(renderContext, e);
- renderContext.renderComplete = true;
- //The render is completed so ensure the renderingNewData flag is reset prior to the next render.
- visView.setRenderingNewData(false);
- return renderContext;
- }.bind(this));
- } catch (e) {
- //The render is completed (with an error) so ensure the renderingNewData flag is reset prior to the next render.
- visView.setRenderingNewData(false);
- this._showRenderError(renderContext, e);
- }
- renderState.firstRenderComplete = true;
- }
- renderContext.renderComplete = true;
- return renderContext;
- }.bind(this));
- }
- return result;
- },
- /**
- * Don't process these keys as steps in the render sequence
- */
- _isReservedContextKey: function _isReservedContextKey(key) {
- return RESERVED_CONTEXT_KEYS.indexOf(key) > -1;
- },
- _showRenderError: function _showRenderError(renderContext, e) {
- if (this.owner.isActive()) {
- if (this.owner.isLastRun(renderContext)) {
- renderContext.visView.hide();
- var errorCode = e.getErrorCode && e.getErrorCode();
- var errorCodeName = errorCode && errorCode.name();
- var errorMessage = errorCodeName && renderErrors[errorCodeName] || 'dwErrorRenderingVisualization';
- this.owner.showError(errorMessage);
- }
- this.logger.error('An error occured during the data widget rendering sequence', e, this.visAPI);
- } else {
- this.logger.debug('An error occured during the data widget rendering sequence', e, this.visAPI);
- }
- }
- });
- return RenderTask;
- });
- //# sourceMappingURL=RenderTask.js.map
|