VIPR3Provider.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. 'use strict';
  2. var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
  3. /**
  4. * Licensed Materials - Property of IBM
  5. * IBM Cognos Products: Dashboard
  6. * (C) Copyright IBM Corp. 2017, 2020
  7. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. */
  9. define(['underscore', './BaseProvider', '../../vipr/VIPR', '../../vipr/VIPRUtils', '../../vipr/VIPRConfig', '../../vipr/VIPRLibraries', '../../vipr/properties/PropertiesCreatorFromVisDefinition', '../../vipr/properties/ColorPropertiesCreator', '../../../lib/@waca/dashboard-common/dist/utils/ObjectHelper', '../../../widgets/livewidget/nls/StringResources', '../../../widgets/livewidget/util/VisUtil'], function (_, BaseProvider, VIPR, VIPRUtils, VIPRConfig, VIPRLibraries, PropertiesCreatorFromVisDefinition, ColorPropertiesCreator, ObjectHelper, StringResources, VisUtil) {
  10. 'use strict';
  11. var VIPR_RENDERER = 'dashboard-analytics/visualizations/renderer/vipr3/VIPRView';
  12. var VIPR3Provider = BaseProvider.extend({
  13. init: function init() {
  14. VIPR3Provider.inherited('init', this, arguments);
  15. this.viprdefinitionsPromises = null;
  16. this.createDefinitionsMap = {};
  17. this.loadedVipr3Bundles = {};
  18. this.initPromise = VIPR.initialize({ 'dashboardApi': this.dashboardApi });
  19. },
  20. contains: function contains(id) {
  21. return this.initPromise.then(function () {
  22. var libs = VIPR.getLibraries();
  23. return Promise.resolve(!!libs[id]);
  24. });
  25. },
  26. clear: function clear() {
  27. var _this = this;
  28. var libType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : VIPRLibraries.LIB_TYPE_ALL;
  29. if (libType === VIPRLibraries.LIB_TYPE_ALL) {
  30. this.viprdefinitionsPromises = null;
  31. this.createDefinitionsMap = {};
  32. this.loadedVipr3Bundles = {};
  33. } else if (this.viprdefinitionsPromises) {
  34. var libIds = [];
  35. if (libType === VIPRLibraries.LIB_TYPE_SYSTEM) {
  36. libIds = VIPR.getSystemLibIds();
  37. } else if (libType === VIPRLibraries.LIB_TYPE_CUSTOM) {
  38. libIds = VIPR.getCustomLibIds();
  39. }
  40. libIds.forEach(function (id) {
  41. delete _this.viprdefinitionsPromises[id];
  42. delete _this.createDefinitionsMap[id];
  43. delete _this.loadedVipr3Bundles[id];
  44. VIPRConfig.removeCustomVisConfiguration(id);
  45. });
  46. }
  47. },
  48. _visualizationPreviewWasLoaded: function _visualizationPreviewWasLoaded() {
  49. return !!this.loadedVipr3Bundles['visualizationPreview'];
  50. },
  51. refreshProvider: function refreshProvider(dashboardApi) {
  52. var _this2 = this;
  53. var visPreviewWasLoaded = this._visualizationPreviewWasLoaded();
  54. this.clear(VIPRLibraries.LIB_TYPE_CUSTOM);
  55. this.initPromise = VIPR.initialize({ 'dashboardApi': dashboardApi, refresh: true });
  56. return this.initPromise.then(this._getVIPRDefinitions.bind(this, VIPRLibraries.LIB_TYPE_CUSTOM, visPreviewWasLoaded)).then(function () {
  57. var promises = Object.values(_this2.viprdefinitionsPromises);
  58. return Promise.all(promises).then(function (viprDefinitions) {
  59. return _.chain(viprDefinitions).map(function (viprDef) {
  60. return viprDef ? _this2.createDefinition(viprDef, true) : null;
  61. }).filter(function (def) {
  62. return !!def;
  63. }).value();
  64. });
  65. });
  66. },
  67. getDefinition: function getDefinition(id) {
  68. var _this3 = this;
  69. return this.initPromise.then(function () {
  70. return _this3._getVIPRDefinition(id).then(function (viprDef) {
  71. if (viprDef) {
  72. if (!_this3.createDefinitionsMap[id]) {
  73. _this3.createDefinitionsMap[id] = _this3.createDefinition(viprDef, true);
  74. }
  75. return _this3.createDefinitionsMap[id];
  76. } else {
  77. return Promise.reject(VisUtil.createVisDefinitionLoadingError(id));
  78. }
  79. });
  80. });
  81. },
  82. getDefinitions: function getDefinitions() {
  83. var _this4 = this;
  84. return this.initPromise.then(function () {
  85. return _this4._getVIPRDefinitions().then(function (viprDefinitions) {
  86. return _this4._createDefinitions(viprDefinitions, true);
  87. });
  88. });
  89. },
  90. _createDefinitions: function _createDefinitions(viprDefinitions, freezeDefinition) {
  91. var _this5 = this;
  92. if (!this.createDefinitionsMap) {
  93. this.createDefinitionsMap = {};
  94. }
  95. return _.chain(viprDefinitions).map(function (def) {
  96. if (!_this5.createDefinitionsMap[def.id]) {
  97. _this5.createDefinitionsMap[def.id] = _this5.createDefinition(def, freezeDefinition);
  98. return _this5.createDefinitionsMap[def.id];
  99. }
  100. }).filter(function (def) {
  101. return !!def;
  102. }).value();
  103. },
  104. /**
  105. * re-load the vipr bundle and recreate the definition
  106. * @param {string} id the visId
  107. */
  108. refresh: function refresh(id) {
  109. var _this6 = this;
  110. VIPR.unloadBundle(id);
  111. return this._loadVIPRDefinition(id).then(function (viprDef) {
  112. if (!_this6.createDefinitionsMap) {
  113. _this6.createDefinitionsMap = {};
  114. }
  115. _this6.createDefinitionsMap[id] = viprDef ? _this6.createDefinition(viprDef, true) : { id: id, renderer: VIPR_RENDERER, empty: true };
  116. return _this6.createDefinitionsMap[id];
  117. });
  118. },
  119. _loadVIPRDefinition: function _loadVIPRDefinition(id) {
  120. var _this7 = this;
  121. return VIPR.loadBundle(id).then(function (bundle) {
  122. _this7.loadedVipr3Bundles[id] = bundle;
  123. return bundle;
  124. }).catch(function (err) {
  125. console.error(err);
  126. return undefined;
  127. });
  128. },
  129. _getVIPRDefinition: function _getVIPRDefinition(id) {
  130. // initialize the map
  131. if (!this.viprdefinitionsPromises) {
  132. this.viprdefinitionsPromises = {};
  133. }
  134. if (!this.viprdefinitionsPromises[id]) {
  135. this.viprdefinitionsPromises[id] = this._loadVIPRDefinition(id);
  136. }
  137. return this.viprdefinitionsPromises[id];
  138. },
  139. _getVIPRDefinitions: function _getVIPRDefinitions() {
  140. var _this8 = this;
  141. var libType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : VIPRLibraries.LIB_TYPE_ALL;
  142. var loadVisPreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  143. var bundleIds = void 0;
  144. if (loadVisPreview) {
  145. bundleIds = VIPR.getBundleIds(libType);
  146. } else {
  147. // Only load definitions for the visualizationPreview bundle when explicitly requested
  148. bundleIds = _.without(VIPR.getBundleIds(libType), 'visualizationPreview');
  149. }
  150. var promises = _.map(bundleIds, function (id) {
  151. return _this8._getVIPRDefinition(id);
  152. });
  153. // wait for all to finish and filter out the failed bundles
  154. return Promise.all(promises.map(function (p) {
  155. return p.catch(function (e) {
  156. return e;
  157. });
  158. })).then(function (definitions) {
  159. return _.filter(definitions, function (def) {
  160. return !!def;
  161. });
  162. }).catch(function (err) {
  163. console.error(err);
  164. });
  165. },
  166. _getViprDefinitionProperties: function _getViprDefinitionProperties(viprDefinition) {
  167. return viprDefinition.vizDef.properties;
  168. },
  169. _getCaption: function _getCaption(viprDefinition, viprConfigDefinition, isCustomVis, isSchematic) {
  170. var schematicPreviewCaption = 'schematicTestCaption';
  171. var visualizationPreview = 'customVisTestVisualization';
  172. var caption = void 0;
  173. if (viprDefinition.userData.name === visualizationPreview) {
  174. caption = viprConfigDefinition.name;
  175. } else if (isCustomVis) {
  176. caption = viprDefinition.userData.name;
  177. // since schematic metadata like name and icon can be updated after creating bundle, and we can not
  178. // unregister/register the schematic bundle due to shared bundle-context with other visualization like Map
  179. // we will separate these metadata info and use vis library information that is set in vipr ConfigDefinition
  180. } else if (isSchematic && viprDefinition.userData.name !== schematicPreviewCaption) {
  181. caption = viprConfigDefinition.name;
  182. } else {
  183. caption = StringResources.get(viprDefinition.userData.name);
  184. }
  185. return caption;
  186. },
  187. /**
  188. * Return a Visualization definition object that can be consumed by VIPR Data and LiveWidget
  189. **/
  190. createDefinition: function createDefinition(viprDefinition, freezeDefinition) {
  191. var viprConfigDefinition = VIPRConfig.getConfig(viprDefinition.id);
  192. var type = viprConfigDefinition && viprConfigDefinition.type;
  193. var isSchematic = viprConfigDefinition && viprConfigDefinition.isSchematic;
  194. var isCustomVis = viprConfigDefinition && viprConfigDefinition.isCustomVis;
  195. var usages = viprConfigDefinition && viprConfigDefinition.usages;
  196. var placeholderIcon = this._getPlaceholder(viprDefinition, isCustomVis, isSchematic);
  197. var caption = this._getCaption(viprDefinition, viprConfigDefinition, isCustomVis, isSchematic);
  198. var viprProperties = [];
  199. var viprGroupProperties = {};
  200. // since schematic metadata like name,icon and assetId can be updated after creating bundle, and we can not
  201. // unregister/register the schematic bundle due to shared bundle-context with other visualization like Map
  202. // we will separate these metadata info and use vis library information that is set in vipr ConfigDefinition
  203. var icon = isSchematic ? viprConfigDefinition.icon : viprDefinition.userData.icon;
  204. var assetId = isSchematic ? viprConfigDefinition.assetId : viprDefinition.userData.assetId;
  205. // set VIPRConig for extensible vis based on VIDA properties
  206. if (VIPRUtils.includeAllProperties(viprDefinition)) {
  207. this._setViprConfigDefinition(viprConfigDefinition, viprDefinition, viprProperties, viprGroupProperties);
  208. }
  209. var vizDefProperties = PropertiesCreatorFromVisDefinition.getInstance().getVizDefPropertiesFromDefinition(viprDefinition);
  210. var properties = PropertiesCreatorFromVisDefinition.getInstance().getPropertiesFromDefintion(viprDefinition.id);
  211. var definition = {
  212. type: type,
  213. isSchematic: isSchematic,
  214. isCustomVis: isCustomVis,
  215. id: viprDefinition.id,
  216. supportsSortAction: VIPRUtils.supportsSortAction(viprDefinition.id),
  217. supportsContextualTopBottomAction: VIPRUtils.supportsContextualTopBottomAction(viprDefinition.id),
  218. supportsNonContextualTopBottomAction: VIPRUtils.supportsNonContextualTopBottomAction(viprDefinition.id),
  219. supportsFormatAction: VIPRUtils.supportsFormatAction(viprDefinition.id),
  220. supportsMaintainAxisScale: VIPRUtils.supportsMaintainAxisScale(viprDefinition.id),
  221. supportsCustomGroupAction: VIPRUtils.supportsCustomGroupAction(viprDefinition.id),
  222. supportsCustomDataSelection: VIPRUtils.supportsCustomDataSelection(viprDefinition.id),
  223. supportsAnnotations: VIPRUtils.supportsAnnotations(viprDefinition.id),
  224. datasets: this._getDatasets(viprDefinition.vizDef.dataSets),
  225. geo: VIPRUtils.isGeospatial(viprDefinition.id),
  226. name: viprDefinition.manifest.name,
  227. caption: caption,
  228. label: caption,
  229. icon: icon,
  230. assetId: assetId,
  231. tabs: VIPRUtils.getVisualizationTabs(viprDefinition.id),
  232. placeholderIcon: placeholderIcon,
  233. isRecommendable: VIPRUtils.isRecommendable(viprDefinition.id),
  234. noDataQuery: VIPRUtils.noDataQuery(viprDefinition.id),
  235. isMultilayersWidget: VIPRUtils.doesConfigPropertyMatchExpected(viprDefinition.id, 'isMultilayersWidget', true),
  236. useFPDAsInsightsInput: VIPRUtils.useFPDAsInsightsInput(viprDefinition.id),
  237. disablePan: VIPRUtils.isDisablePan(viprDefinition.id),
  238. renderWithoutCompletingMapping: VIPRUtils.isRenderWithoutCompletingMapping(viprDefinition.id),
  239. aggregateAndSortOnClient: VIPRUtils.aggregateAndSortOnClient(viprDefinition.id),
  240. preferredSize: {
  241. height: 420,
  242. width: 500
  243. },
  244. dataSlots: VIPRUtils.createDataSlots(viprDefinition),
  245. metaDataEntries: VIPRUtils.createMetaDataEntries(viprDefinition.vizDef),
  246. properties: properties,
  247. vizDefProperties: vizDefProperties,
  248. propertyPrefixes: VIPRUtils.getPropertyPrefixes(viprDefinition),
  249. listenForPropChanges: VIPRUtils.getListenForPropChanges(viprDefinition),
  250. groupedProperty: VIPRUtils.getGroupedProperty(viprDefinition),
  251. renderer: VIPR_RENDERER,
  252. scope: 'default',
  253. themeMapping: ColorPropertiesCreator.getInstance().getThemeIdMappings(properties),
  254. queryHints: VIPRUtils.getQueryHints(viprDefinition.id),
  255. binningConfig: VIPRUtils.getBinning(viprDefinition.id),
  256. canApplyBinning: VIPRUtils.canApplyAutoBin(viprDefinition.id),
  257. isViewBinned: false,
  258. supportsOLAP: !VIPRUtils.doesConfigPropertyMatchExpected(viprDefinition.id, 'doesNotSupportOLAP', true),
  259. usages: usages
  260. };
  261. if (isSchematic) {
  262. definition.getSchematicContent = viprConfigDefinition.schematicVis.getSchematicContent.bind(viprConfigDefinition.schematicVis);
  263. }
  264. var nLimit = VIPRUtils.getDataRowLimit(viprDefinition.id);
  265. if (nLimit) {
  266. definition.dataRowLimit = nLimit;
  267. }
  268. var nLimitIE = VIPRUtils.getDataRowLimitIE(viprDefinition.id);
  269. if (nLimitIE) {
  270. definition.dataRowLimitIE = nLimitIE;
  271. }
  272. return freezeDefinition ? ObjectHelper.deepFreezeObject(definition) : definition;
  273. },
  274. _setViprConfigDefinition: function _setViprConfigDefinition(viprConfigDefinition, viprDefinition, viprProperties, viprGroupProperties) {
  275. VIPRUtils.getViprProperiesAndGroups(viprDefinition, viprProperties, viprGroupProperties);
  276. var options = {
  277. viprProperties: viprProperties,
  278. viprGroupProperties: _extends({}, viprGroupProperties),
  279. dataSets: viprDefinition.vizDef.dataSets
  280. };
  281. VIPRConfig.setAllViprConfigProperties(viprConfigDefinition, options);
  282. viprDefinition.userData.config = {
  283. 'properties': {
  284. 'exclude': [],
  285. 'include': viprConfigDefinition.bundleInclude
  286. }
  287. };
  288. VIPR.updateCustomLibrary(viprDefinition.id);
  289. },
  290. _getPlaceholder: function _getPlaceholder(viprDefinition, isCustomVis, isSchematic) {
  291. var isNonPreviewSchematic = isSchematic && viprDefinition.id !== 'com.ibm.vis.schematicsPreview';
  292. var isNonPreviewCustom = isCustomVis && viprDefinition.id !== 'visualizationPreview';
  293. var iconBase = this.icon_root;
  294. var icon = viprDefinition.userData.placeholderIcon;
  295. if (viprDefinition.userData.icon) {
  296. // When there is an icon in custom or schematic definition, returns this icon
  297. if (isNonPreviewCustom || isNonPreviewSchematic) {
  298. iconBase = viprDefinition.userData.placeholderIcon;
  299. icon = viprDefinition.userData.icon;
  300. }
  301. } else {
  302. // When there is no icon in custom or schematic definition, return default placeholderIcon respectively
  303. if (isCustomVis) {
  304. icon = 'placeholders/custom-visual.svg';
  305. } else if (isSchematic) {
  306. icon = 'placeholders/custom-schematic.svg';
  307. }
  308. }
  309. return iconBase + icon;
  310. },
  311. _getDatasets: function _getDatasets(datasets) {
  312. var bIsSingleDataset = datasets.length === 1;
  313. return _.map(datasets, function (dataset) {
  314. return {
  315. /* Default Dataset name for sinlge dataset Viz is set to be 'data' if there is no name in the definition */
  316. 'name': bIsSingleDataset && !dataset.name ? 'data' : dataset.name,
  317. 'optional': dataset.optional,
  318. 'suppressMissing': dataset.suppressMissing,
  319. 'needsSorted': dataset.needsSorted,
  320. 'requiresValues': dataset.requiresValues,
  321. 'caption': dataset.caption
  322. };
  323. });
  324. }
  325. });
  326. return VIPR3Provider;
  327. });
  328. //# sourceMappingURL=VIPR3Provider.js.map