compactAppointmentsHelper.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. /**
  2. * DevExtreme (ui/scheduler/compactAppointmentsHelper.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. Object.defineProperty(exports, "__esModule", {
  11. value: true
  12. });
  13. exports.CompactAppointmentsHelper = void 0;
  14. var _renderer = require("../../core/renderer");
  15. var _renderer2 = _interopRequireDefault(_renderer);
  16. var _button = require("../button");
  17. var _button2 = _interopRequireDefault(_button);
  18. var _translator = require("../../animation/translator");
  19. var _translator2 = _interopRequireDefault(_translator);
  20. var _message = require("../../localization/message");
  21. var _message2 = _interopRequireDefault(_message);
  22. var _function_template = require("../widget/function_template");
  23. var _function_template2 = _interopRequireDefault(_function_template);
  24. var _deferred = require("../../core/utils/deferred");
  25. var _deferred2 = _interopRequireDefault(_deferred);
  26. function _interopRequireDefault(obj) {
  27. return obj && obj.__esModule ? obj : {
  28. "default": obj
  29. }
  30. }
  31. function _classCallCheck(instance, Constructor) {
  32. if (!(instance instanceof Constructor)) {
  33. throw new TypeError("Cannot call a class as a function")
  34. }
  35. }
  36. function _defineProperties(target, props) {
  37. for (var i = 0; i < props.length; i++) {
  38. var descriptor = props[i];
  39. descriptor.enumerable = descriptor.enumerable || false;
  40. descriptor.configurable = true;
  41. if ("value" in descriptor) {
  42. descriptor.writable = true
  43. }
  44. Object.defineProperty(target, descriptor.key, descriptor)
  45. }
  46. }
  47. function _createClass(Constructor, protoProps, staticProps) {
  48. if (protoProps) {
  49. _defineProperties(Constructor.prototype, protoProps)
  50. }
  51. if (staticProps) {
  52. _defineProperties(Constructor, staticProps)
  53. }
  54. Object.defineProperty(Constructor, "prototype", {
  55. writable: false
  56. });
  57. return Constructor
  58. }
  59. var APPOINTMENT_COLLECTOR_CLASS = "dx-scheduler-appointment-collector";
  60. var COMPACT_APPOINTMENT_COLLECTOR_CLASS = APPOINTMENT_COLLECTOR_CLASS + "-compact";
  61. var APPOINTMENT_COLLECTOR_CONTENT_CLASS = APPOINTMENT_COLLECTOR_CLASS + "-content";
  62. var WEEK_VIEW_COLLECTOR_OFFSET = 5;
  63. var COMPACT_THEME_WEEK_VIEW_COLLECTOR_OFFSET = 1;
  64. var CompactAppointmentsHelper = exports.CompactAppointmentsHelper = function() {
  65. function CompactAppointmentsHelper(instance) {
  66. _classCallCheck(this, CompactAppointmentsHelper);
  67. this.instance = instance;
  68. this.elements = []
  69. }
  70. _createClass(CompactAppointmentsHelper, [{
  71. key: "render",
  72. value: function(options) {
  73. var $container = options.$container,
  74. width = options.width,
  75. height = options.height,
  76. items = options.items,
  77. isCompact = options.isCompact,
  78. applyOffset = options.applyOffset,
  79. coordinates = options.coordinates,
  80. buttonColor = options.buttonColor;
  81. var template = this._createTemplate(items.data.length, isCompact);
  82. var button = this._createCompactButton($container, width, height, template, items, isCompact, applyOffset, coordinates);
  83. var $button = button.$element();
  84. this._makeBackgroundColor($button, items.colors, buttonColor);
  85. this._makeBackgroundDarker($button);
  86. this.elements.push($button);
  87. $button.data("items", this._createAppointmentsData(items));
  88. return $button
  89. }
  90. }, {
  91. key: "clear",
  92. value: function() {
  93. this.elements.forEach(function(button) {
  94. button.detach();
  95. button.remove()
  96. });
  97. this.elements = []
  98. }
  99. }, {
  100. key: "_createAppointmentsData",
  101. value: function(items) {
  102. return items.data.map(function(item, index) {
  103. return {
  104. data: item,
  105. color: items.colors[index]
  106. }
  107. })
  108. }
  109. }, {
  110. key: "_onButtonClick",
  111. value: function(e) {
  112. var $button = (0, _renderer2.default)(e.element);
  113. this.instance.showAppointmentTooltipCore($button, $button.data("items"))
  114. }
  115. }, {
  116. key: "_getCollectorOffset",
  117. value: function(width) {
  118. return this.instance.fire("getCellWidth") - width - this._getCollectorRightOffset()
  119. }
  120. }, {
  121. key: "_getCollectorRightOffset",
  122. value: function() {
  123. return this.instance.getRenderingStrategyInstance()._isCompactTheme() ? COMPACT_THEME_WEEK_VIEW_COLLECTOR_OFFSET : WEEK_VIEW_COLLECTOR_OFFSET
  124. }
  125. }, {
  126. key: "_makeBackgroundDarker",
  127. value: function(button) {
  128. button.css("boxShadow", "inset ".concat(button.get(0).getBoundingClientRect().width, "px 0 0 0 rgba(0, 0, 0, 0.3)"))
  129. }
  130. }, {
  131. key: "_makeBackgroundColor",
  132. value: function($button, colors, color) {
  133. _deferred2.default.when.apply(null, colors).done(function() {
  134. this._makeBackgroundColorCore($button, color, arguments)
  135. }.bind(this))
  136. }
  137. }, {
  138. key: "_makeBackgroundColorCore",
  139. value: function($button, color, itemsColors) {
  140. var paintButton = true;
  141. var currentItemColor;
  142. color && color.done(function(color) {
  143. if (itemsColors.length) {
  144. currentItemColor = itemsColors[0];
  145. for (var i = 1; i < itemsColors.length; i++) {
  146. if (currentItemColor !== itemsColors[i]) {
  147. paintButton = false;
  148. break
  149. }
  150. currentItemColor = color
  151. }
  152. }
  153. color && paintButton && $button.css("backgroundColor", color)
  154. }.bind(this))
  155. }
  156. }, {
  157. key: "_setPosition",
  158. value: function(element, position) {
  159. _translator2.default.move(element, {
  160. top: position.top,
  161. left: position.left
  162. })
  163. }
  164. }, {
  165. key: "_createCompactButton",
  166. value: function($container, width, height, template, items, isCompact, applyOffset, coordinates) {
  167. var _this = this;
  168. var $button = this._createCompactButtonElement($container, width, isCompact, applyOffset, coordinates);
  169. return this.instance._createComponent($button, _button2.default, {
  170. type: "default",
  171. width: width,
  172. height: height,
  173. onClick: function(e) {
  174. return _this._onButtonClick(e)
  175. },
  176. template: this._renderTemplate(template, items, isCompact)
  177. })
  178. }
  179. }, {
  180. key: "_createCompactButtonElement",
  181. value: function($container, width, isCompact, applyOffset, coordinates) {
  182. var result = (0, _renderer2.default)("<div>").addClass(APPOINTMENT_COLLECTOR_CLASS).toggleClass(COMPACT_APPOINTMENT_COLLECTOR_CLASS, isCompact).appendTo($container);
  183. var offset = applyOffset ? this._getCollectorOffset(width) : 0;
  184. this._setPosition(result, {
  185. top: coordinates.top,
  186. left: coordinates.left + offset
  187. });
  188. return result
  189. }
  190. }, {
  191. key: "_renderTemplate",
  192. value: function(template, items, isCompact) {
  193. return new _function_template2.default(function(options) {
  194. return template.render({
  195. model: {
  196. appointmentCount: items.data.length,
  197. isCompact: isCompact
  198. },
  199. container: options.container
  200. })
  201. })
  202. }
  203. }, {
  204. key: "_createTemplate",
  205. value: function(count, isCompact) {
  206. this._initButtonTemplate(count, isCompact);
  207. return this.instance._getAppointmentTemplate("appointmentCollectorTemplate")
  208. }
  209. }, {
  210. key: "_initButtonTemplate",
  211. value: function(count, isCompact) {
  212. var _this2 = this;
  213. this.instance._defaultTemplates.appointmentCollector = new _function_template2.default(function(options) {
  214. return _this2._createButtonTemplate(count, (0, _renderer2.default)(options.container), isCompact)
  215. })
  216. }
  217. }, {
  218. key: "_createButtonTemplate",
  219. value: function(appointmentCount, element, isCompact) {
  220. var text = isCompact ? appointmentCount : _message2.default.getFormatter("dxScheduler-moreAppointments")(appointmentCount);
  221. return element.append((0, _renderer2.default)("<span>").text(text)).addClass(APPOINTMENT_COLLECTOR_CONTENT_CLASS)
  222. }
  223. }]);
  224. return CompactAppointmentsHelper
  225. }();