BaseContentProvider.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. 'use strict';
  2. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  3. /**
  4. * Licensed Materials - Property of IBM
  5. * IBM Business Analytics (C) Copyright IBM Corp. 2019, 2020
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. /**
  9. * @class ContentFactory
  10. * @hideconstructor
  11. * @classdesc API class that is used to generate content specs and create them
  12. */
  13. define(['../../../../../lib/@waca/dashboard-common/dist/core/APIFactory', '../../../../../canvas/Content', '../../../../../dashboard/layout/LayoutHelper', '../../../../../dashboard/glass/util/InstrumentationUtil', '../../../../../lib/@waca/dashboard-common/dist/api/ContentProviderAPI'], function (APIFactory, Content, LayoutHelper, InstrumentationUtil, ContentProviderAPI) {
  14. var BaseContentProvider = function () {
  15. function BaseContentProvider(options) {
  16. _classCallCheck(this, BaseContentProvider);
  17. this.dashboardApi = options.features['API'];
  18. options.features['ContentFactory'].registerProvider(this);
  19. }
  20. BaseContentProvider.prototype.getAPI = function getAPI() {
  21. return APIFactory.createAPI(this, [ContentProviderAPI]);
  22. };
  23. BaseContentProvider.prototype.getTypeList = function getTypeList() {
  24. var types = [null, undefined, ''];
  25. if (!this._contentTypes) {
  26. this._contentTypes = this.dashboardApi.getFeature('ContentTypeRegistry');
  27. }
  28. return this._contentTypes ? this._contentTypes.getRegisteredTypes().concat(types) : types;
  29. };
  30. BaseContentProvider.prototype.addModel = function addModel(options, _ref, transactionToken) {
  31. var canvas = _ref.canvas,
  32. boardModel = _ref.boardModel,
  33. canvasContent = _ref.canvasContent;
  34. var addOptions = {
  35. parentId: options.containerId,
  36. insertBefore: options.insertBefore,
  37. copyPaste: options.copyPaste,
  38. model: options.spec,
  39. modelIdsValid: options.modelIdsValid === true,
  40. layoutProperties: {
  41. style: options.spec.style || {}
  42. }
  43. };
  44. if (options.properties) {
  45. ['left', 'top', 'height', 'width'].forEach(function (prop) {
  46. if (options.properties[prop] !== undefined) {
  47. addOptions.layoutProperties.style[prop] = options.properties[prop];
  48. delete options.properties[prop];
  49. }
  50. });
  51. }
  52. LayoutHelper.setPreferredAddOptions(addOptions, boardModel.layout, this.dashboardApi);
  53. if (!addOptions.parentId && !canvasContent.getFeature('ContentViewDOM')) {
  54. addOptions.parentId = canvasContent.getId();
  55. }
  56. var isLayout = canvas.isLayoutType(options.spec.type);
  57. var contentRegistry = this.dashboardApi.getFeature('ContentTypeRegistry');
  58. var isTypeRegistered = contentRegistry ? contentRegistry.isTypeRegistered(options.spec.type) : false;
  59. var _add = void 0;
  60. if (options.spec.type === 'widget') {
  61. // this is the case we are adding a layout of type widget
  62. // it will follow the new structure where the widget model is under the features secfion
  63. _add = this._addContent.bind(this);
  64. } else if (!isLayout && (options.spec.widgets || options.spec.layout && options.spec.layout.items)) {
  65. _add = this._addFragment.bind(this);
  66. } else if (!isLayout) {
  67. if (isTypeRegistered) {
  68. _add = this._addContent.bind(this);
  69. } else {
  70. _add = this._addWidget.bind(this);
  71. }
  72. } else {
  73. _add = this._addLayout.bind(this);
  74. }
  75. var id = _add(addOptions, boardModel, {
  76. undoRedoTransactionId: transactionToken.transactionId,
  77. transactionToken: transactionToken,
  78. skipUndoRedo: true
  79. });
  80. return Promise.resolve(id);
  81. };
  82. BaseContentProvider.prototype.createContent = function createContent(options) {
  83. return new Content(options);
  84. };
  85. BaseContentProvider.prototype._addWidget = function _addWidget(addOptions, boardModel, options) {
  86. this._track(addOptions);
  87. var payload = boardModel.addWidget(addOptions, null, options);
  88. var parameter = payload && payload.value && payload.value.parameter;
  89. return parameter && parameter.model && parameter.model.id;
  90. };
  91. BaseContentProvider.prototype._addFragment = function _addFragment(addOptions, boardModel, options) {
  92. var payload = boardModel.addFragment(addOptions, null, options);
  93. var parameter = payload && payload.value && payload.value.parameter;
  94. return parameter && parameter.model && parameter.model.layout && parameter.model.layout.id;
  95. };
  96. BaseContentProvider.prototype._addContent = function _addContent(addOptions, boardModel, options) {
  97. this._track(addOptions);
  98. return boardModel.addContent(addOptions, null, options);
  99. };
  100. BaseContentProvider.prototype._addLayout = function _addLayout(addOptions, boardModel, options) {
  101. var payload = boardModel.addLayouts({ addLayoutArray: [addOptions] }, null, options);
  102. return payload.value.parameter.addLayoutArray[0].model.id;
  103. };
  104. BaseContentProvider.prototype._track = function _track() {
  105. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  106. var model = options.model;
  107. if (model) {
  108. InstrumentationUtil.trackWidget('created', this.dashboardApi, {
  109. name: model.name,
  110. type: model.type,
  111. data: model.data
  112. });
  113. }
  114. };
  115. return BaseContentProvider;
  116. }();
  117. return BaseContentProvider;
  118. });
  119. //# sourceMappingURL=BaseContentProvider.js.map