From a54694191902b51da563642c878a92ac55e0fe11 Mon Sep 17 00:00:00 2001 From: sushuang Date: Thu, 2 Nov 2017 02:38:41 +0800 Subject: [PATCH] Fix #6892 (brush throws error if data has empty) --- src/component/brush/selector.js | 39 +++++++++++++++++++-------------- test/brush.html | 9 +++++++- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/component/brush/selector.js b/src/component/brush/selector.js index 07a30622b..d6ea04e45 100644 --- a/src/component/brush/selector.js +++ b/src/component/brush/selector.js @@ -15,21 +15,22 @@ var selector = { lineY: getLineSelectors(1), rect: { point: function (itemLayout, selectors, area) { - return area.boundingRect.contain(itemLayout[0], itemLayout[1]); + return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]); }, rect: function (itemLayout, selectors, area) { - return area.boundingRect.intersect(itemLayout); + return itemLayout && area.boundingRect.intersect(itemLayout); } }, polygon: { point: function (itemLayout, selectors, area) { - return area.boundingRect.contain(itemLayout[0], itemLayout[1]) + return itemLayout + && area.boundingRect.contain(itemLayout[0], itemLayout[1]) && polygonContain.contain(area.range, itemLayout[0], itemLayout[1]); }, rect: function (itemLayout, selectors, area) { var points = area.range; - if (points.length <= 1) { + if (!itemLayout || points.length <= 1) { return false; } @@ -61,21 +62,25 @@ function getLineSelectors(xyIndex) { return { point: function (itemLayout, selectors, area) { - var range = area.range; - var p = itemLayout[xyIndex]; - return inLineRange(p, range); + if (itemLayout) { + var range = area.range; + var p = itemLayout[xyIndex]; + return inLineRange(p, range); + } }, rect: function (itemLayout, selectors, area) { - var range = area.range; - var layoutRange = [ - itemLayout[xy[xyIndex]], - itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]] - ]; - layoutRange[1] < layoutRange[0] && layoutRange.reverse(); - return inLineRange(layoutRange[0], range) - || inLineRange(layoutRange[1], range) - || inLineRange(range[0], layoutRange) - || inLineRange(range[1], layoutRange); + if (itemLayout) { + var range = area.range; + var layoutRange = [ + itemLayout[xy[xyIndex]], + itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]] + ]; + layoutRange[1] < layoutRange[0] && layoutRange.reverse(); + return inLineRange(layoutRange[0], range) + || inLineRange(layoutRange[1], range) + || inLineRange(range[0], layoutRange) + || inLineRange(range[1], layoutRange); + } } }; } diff --git a/test/brush.html b/test/brush.html index 612560935..9d04c9849 100644 --- a/test/brush.html +++ b/test/brush.html @@ -903,7 +903,14 @@ for (var i = 0; i < 10; i++) { xAxisData.push('Class' + i); - data1.push((Math.random() * 2).toFixed(2)); + + if (i === 1) { + data1.push(null); + } + else { + data1.push((Math.random() * 2).toFixed(2)); + } + data2.push(-Math.random().toFixed(2)); data3.push((Math.random() * 5).toFixed(2)); data4.push((Math.random() + 0.3).toFixed(2)); -- GitLab