range_series.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. /**
  2. * DevExtreme (viz/series/range_series.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. function _defineProperty(obj, key, value) {
  11. if (key in obj) {
  12. Object.defineProperty(obj, key, {
  13. value: value,
  14. enumerable: true,
  15. configurable: true,
  16. writable: true
  17. })
  18. } else {
  19. obj[key] = value
  20. }
  21. return obj
  22. }
  23. var extend = require("../../core/utils/extend").extend;
  24. var _extend = extend;
  25. var _isDefined = require("../../core/utils/type").isDefined;
  26. var _map = require("../core/utils").map;
  27. var _noop = require("../../core/utils/common").noop;
  28. var scatterSeries = require("./scatter_series").chart;
  29. var barSeries = require("./bar_series").chart.bar;
  30. var areaSeries = require("./area_series").chart.area;
  31. exports.chart = {};
  32. var baseRangeSeries = {
  33. areErrorBarsVisible: _noop,
  34. _createErrorBarGroup: _noop,
  35. _checkData: function(data, skippedFields) {
  36. var valueFields = this.getValueFields();
  37. return scatterSeries._checkData.call(this, data, skippedFields, {
  38. minValue: valueFields[0],
  39. value: valueFields[1]
  40. }) && data.minValue === data.minValue
  41. },
  42. getValueRangeInitialValue: scatterSeries.getValueRangeInitialValue,
  43. _getPointDataSelector: function(data) {
  44. var _this = this;
  45. var valueFields = this.getValueFields();
  46. var val1Field = valueFields[0];
  47. var val2Field = valueFields[1];
  48. var tagField = this.getTagField();
  49. var argumentField = this.getArgumentField();
  50. return function(data) {
  51. return {
  52. tag: data[tagField],
  53. minValue: _this._processEmptyValue(data[val1Field]),
  54. value: _this._processEmptyValue(data[val2Field]),
  55. argument: data[argumentField],
  56. data: data
  57. }
  58. }
  59. },
  60. _defaultAggregator: "range",
  61. _aggregators: {
  62. range: function(_ref, series) {
  63. var _data$reduce;
  64. var intervalStart = _ref.intervalStart,
  65. data = _ref.data;
  66. if (!data.length) {
  67. return
  68. }
  69. var valueFields = series.getValueFields();
  70. var val1Field = valueFields[0];
  71. var val2Field = valueFields[1];
  72. var result = data.reduce(function(result, item) {
  73. var val1 = item[val1Field];
  74. var val2 = item[val2Field];
  75. if (!_isDefined(val1) || !_isDefined(val2)) {
  76. return result
  77. }
  78. result[val1Field] = Math.min(result[val1Field], Math.min(val1, val2));
  79. result[val2Field] = Math.max(result[val2Field], Math.max(val1, val2));
  80. return result
  81. }, (_data$reduce = {}, _defineProperty(_data$reduce, val1Field, 1 / 0), _defineProperty(_data$reduce, val2Field, -(1 / 0)), _defineProperty(_data$reduce, series.getArgumentField(), intervalStart), _data$reduce));
  82. if (!isFinite(result[val1Field]) || !isFinite(result[val2Field])) {
  83. if (data.filter(function(i) {
  84. return null === i[val1Field] && null === i[val2Field]
  85. }).length === data.length) {
  86. result[val1Field] = result[val2Field] = null
  87. } else {
  88. return
  89. }
  90. }
  91. return result
  92. }
  93. },
  94. getValueFields: function() {
  95. return [this._options.rangeValue1Field || "val1", this._options.rangeValue2Field || "val2"]
  96. },
  97. getSeriesPairCoord: function(coord, isArgument) {
  98. var oppositeCoord = null;
  99. var rotated = this._options.rotated;
  100. var isOpposite = !isArgument && !rotated || isArgument && rotated;
  101. var coordName = isOpposite ? "vy" : "vx";
  102. var minCoordName = rotated ? "minX" : "minY";
  103. var oppositeCoordName = isOpposite ? "vx" : "vy";
  104. var points = this.getPoints();
  105. for (var i = 0; i < points.length; i++) {
  106. var p = points[i];
  107. var tmpCoord = void 0;
  108. if (isArgument) {
  109. tmpCoord = p.getCenterCoord()[coordName[1]] === coord ? p[oppositeCoordName] : void 0
  110. } else {
  111. var coords = [Math.min(p[coordName], p[minCoordName]), Math.max(p[coordName], p[minCoordName])];
  112. tmpCoord = coord >= coords[0] && coord <= coords[1] ? p[oppositeCoordName] : void 0
  113. }
  114. if (this.checkAxisVisibleAreaCoord(!isArgument, tmpCoord)) {
  115. oppositeCoord = tmpCoord;
  116. break
  117. }
  118. }
  119. return oppositeCoord
  120. }
  121. };
  122. exports.chart.rangebar = _extend({}, barSeries, baseRangeSeries);
  123. exports.chart.rangearea = _extend({}, areaSeries, {
  124. _drawPoint: function(options) {
  125. var point = options.point;
  126. if (point.isInVisibleArea()) {
  127. point.clearVisibility();
  128. point.draw(this._renderer, options.groups);
  129. this._drawnPoints.push(point);
  130. if (!point.visibleTopMarker) {
  131. point.hideMarker("top")
  132. }
  133. if (!point.visibleBottomMarker) {
  134. point.hideMarker("bottom")
  135. }
  136. } else {
  137. point.setInvisibility()
  138. }
  139. },
  140. _prepareSegment: function(points, rotated) {
  141. var processedPoints = this._processSinglePointsAreaSegment(points, rotated);
  142. var processedMinPointsCoords = _map(processedPoints, function(pt) {
  143. return pt.getCoords(true)
  144. });
  145. return {
  146. line: processedPoints,
  147. bottomLine: processedMinPointsCoords,
  148. area: _map(processedPoints, function(pt) {
  149. return pt.getCoords()
  150. }).concat(processedMinPointsCoords.slice().reverse()),
  151. singlePointSegment: processedPoints !== points
  152. }
  153. },
  154. _getDefaultSegment: function(segment) {
  155. var defaultSegment = areaSeries._getDefaultSegment.call(this, segment);
  156. defaultSegment.bottomLine = defaultSegment.line;
  157. return defaultSegment
  158. },
  159. _removeElement: function(element) {
  160. areaSeries._removeElement.call(this, element);
  161. element.bottomLine && element.bottomLine.remove()
  162. },
  163. _drawElement: function(segment, group) {
  164. var that = this;
  165. var drawnElement = areaSeries._drawElement.call(that, segment, group);
  166. drawnElement.bottomLine = that._bordersGroup && that._createBorderElement(segment.bottomLine, {
  167. "stroke-width": that._styles.normal.border["stroke-width"]
  168. }).append(that._bordersGroup);
  169. return drawnElement
  170. },
  171. _applyStyle: function(style) {
  172. var that = this;
  173. var elementsGroup = that._elementsGroup;
  174. var bordersGroup = that._bordersGroup;
  175. elementsGroup && elementsGroup.smartAttr(style.elements);
  176. bordersGroup && bordersGroup.attr(style.border);
  177. (that._graphics || []).forEach(function(graphic) {
  178. graphic.line && graphic.line.attr({
  179. "stroke-width": style.border["stroke-width"]
  180. });
  181. graphic.bottomLine && graphic.bottomLine.attr({
  182. "stroke-width": style.border["stroke-width"]
  183. })
  184. })
  185. },
  186. _updateElement: function(element, segment, animate, complete) {
  187. var bottomLineParams = {
  188. points: segment.bottomLine
  189. };
  190. var bottomBorderElement = element.bottomLine;
  191. areaSeries._updateElement.apply(this, arguments);
  192. if (bottomBorderElement) {
  193. animate ? bottomBorderElement.animate(bottomLineParams) : bottomBorderElement.attr(bottomLineParams)
  194. }
  195. }
  196. }, baseRangeSeries);