CanvasDnD.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. /**
  9. * @class CanvasDnD
  10. * @hideconstructor
  11. *
  12. * @classdesc
  13. * Represents the drag and drop action within the dashboard canvas
  14. */
  15. define(['../CanvasDnDAPI', '../../../../../lib/@waca/dashboard-common/dist/core/APIFactory'], function (CanvasDnDAPI, APIFactory) {
  16. var PIN = 'pin';
  17. var WIDGET = 'widget';
  18. var GROUP_CONTENT = 'groupContent'; //this type occurs when grouped a few widgets into a single group, select a group, click on one of the widget within the group to select it and move it. When move it the type is 'groupContent'
  19. var DASHBOARD_DND_TYPES = [PIN, WIDGET];
  20. return function () {
  21. function CanvasDnD() {
  22. _classCallCheck(this, CanvasDnD);
  23. this._api = APIFactory.createAPI(this, [CanvasDnDAPI]);
  24. this.providers = [];
  25. }
  26. CanvasDnD.prototype.destroy = function destroy() {
  27. this.api = null;
  28. this.providers = [];
  29. };
  30. CanvasDnD.prototype.getAPI = function getAPI() {
  31. return this._api;
  32. };
  33. CanvasDnD.prototype.registerProvider = function registerProvider(provider) {
  34. var registered = this.providers.find(function (registeredProvider) {
  35. return registeredProvider.getImplType() === provider.getImplType();
  36. });
  37. if (typeof registered === 'undefined' || registered === null) {
  38. this.providers.push(provider);
  39. }
  40. };
  41. CanvasDnD.prototype.accepts = function accepts() {
  42. var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  43. var options = arguments[1];
  44. var types = this._getSupportedTypes(options);
  45. if (types.indexOf(payload.type) !== -1) {
  46. return true;
  47. }
  48. var providerAccepted = this.providers.find(function (provider) {
  49. return provider.accepts(payload, options);
  50. });
  51. return providerAccepted ? true : false;
  52. };
  53. CanvasDnD.prototype.onDrop = function onDrop() {
  54. var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  55. if (payload.data && payload.data.operation === 'new') {
  56. return Promise.resolve(payload.data.model);
  57. }
  58. var promise = Promise.resolve();
  59. this.providers.forEach(function (provider) {
  60. promise = promise.then(function (model) {
  61. return model ? model : provider.onDrop(payload);
  62. });
  63. });
  64. return promise;
  65. };
  66. CanvasDnD.prototype._getSupportedTypes = function _getSupportedTypes(options) {
  67. if (options && options.fromMultipurposeWidget) {
  68. return [];
  69. }
  70. var types = [].concat(DASHBOARD_DND_TYPES);
  71. if (options && options.fromCanvas) {
  72. types.push(GROUP_CONTENT);
  73. }
  74. return types;
  75. };
  76. return CanvasDnD;
  77. }();
  78. });
  79. //# sourceMappingURL=CanvasDnD.js.map