1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.BRUSH_FILTER_EVENTS = void 0;
|
4 | var tslib_1 = require("tslib");
|
5 | var chart_1 = require("../../../chart");
|
6 | var base_1 = (0, tslib_1.__importDefault)(require("../base"));
|
7 | var util_1 = require("../util");
|
8 |
|
9 | function getFilter(scale, dim, point1, point2) {
|
10 | var min = Math.min(point1[dim], point2[dim]);
|
11 | var max = Math.max(point1[dim], point2[dim]);
|
12 | var _a = scale.range, rangeMin = _a[0], rangeMax = _a[1];
|
13 |
|
14 | if (min < rangeMin) {
|
15 | min = rangeMin;
|
16 | }
|
17 | if (max > rangeMax) {
|
18 | max = rangeMax;
|
19 | }
|
20 |
|
21 | if (min === rangeMax && max === rangeMax) {
|
22 | return null;
|
23 | }
|
24 | var minValue = scale.invert(min);
|
25 | var maxValue = scale.invert(max);
|
26 | if (scale.isCategory) {
|
27 | var minIndex = scale.values.indexOf(minValue);
|
28 | var maxIndex = scale.values.indexOf(maxValue);
|
29 | var arr_1 = scale.values.slice(minIndex, maxIndex + 1);
|
30 | return function (value) {
|
31 | return arr_1.includes(value);
|
32 | };
|
33 | }
|
34 | else {
|
35 | return function (value) {
|
36 | return value >= minValue && value <= maxValue;
|
37 | };
|
38 | }
|
39 | }
|
40 |
|
41 | var EVENTS;
|
42 | (function (EVENTS) {
|
43 | EVENTS["FILTER"] = "brush-filter-processing";
|
44 | EVENTS["RESET"] = "brush-filter-reset";
|
45 | EVENTS["BEFORE_FILTER"] = "brush-filter:beforefilter";
|
46 | EVENTS["AFTER_FILTER"] = "brush-filter:afterfilter";
|
47 | EVENTS["BEFORE_RESET"] = "brush-filter:beforereset";
|
48 | EVENTS["AFTER_RESET"] = "brush-filter:afterreset";
|
49 | })(EVENTS || (EVENTS = {}));
|
50 | exports.BRUSH_FILTER_EVENTS = EVENTS;
|
51 |
|
52 |
|
53 |
|
54 |
|
55 | var RangeFilter = (function (_super) {
|
56 | (0, tslib_1.__extends)(RangeFilter, _super);
|
57 | function RangeFilter() {
|
58 | var _this = _super !== null && _super.apply(this, arguments) || this;
|
59 | |
60 |
|
61 |
|
62 | _this.dims = ['x', 'y'];
|
63 |
|
64 | _this.startPoint = null;
|
65 | _this.isStarted = false;
|
66 | return _this;
|
67 | }
|
68 |
|
69 | RangeFilter.prototype.hasDim = function (dim) {
|
70 | return this.dims.includes(dim);
|
71 | };
|
72 | |
73 |
|
74 |
|
75 | RangeFilter.prototype.start = function () {
|
76 | var context = this.context;
|
77 | this.isStarted = true;
|
78 | this.startPoint = context.getCurrentPoint();
|
79 | };
|
80 | |
81 |
|
82 |
|
83 | RangeFilter.prototype.filter = function () {
|
84 | var startPoint;
|
85 | var currentPoint;
|
86 | if ((0, util_1.isMask)(this.context)) {
|
87 | var maskShape = this.context.event.target;
|
88 | var bbox = maskShape.getCanvasBBox();
|
89 | startPoint = { x: bbox.x, y: bbox.y };
|
90 | currentPoint = { x: bbox.maxX, y: bbox.maxY };
|
91 | }
|
92 | else {
|
93 | if (!this.isStarted) {
|
94 |
|
95 | return;
|
96 | }
|
97 | startPoint = this.startPoint;
|
98 | currentPoint = this.context.getCurrentPoint();
|
99 | }
|
100 | if (Math.abs(startPoint.x - currentPoint.x) < 5 || Math.abs(startPoint.x - currentPoint.y) < 5) {
|
101 |
|
102 | return;
|
103 | }
|
104 | var _a = this.context, view = _a.view, event = _a.event;
|
105 | var payload = { view: view, event: event, dims: this.dims };
|
106 | view.emit(EVENTS.BEFORE_FILTER, chart_1.Event.fromData(view, EVENTS.BEFORE_FILTER, payload));
|
107 | var coord = view.getCoordinate();
|
108 | var normalCurrent = coord.invert(currentPoint);
|
109 | var normalStart = coord.invert(startPoint);
|
110 |
|
111 | if (this.hasDim('x')) {
|
112 | var xScale = view.getXScale();
|
113 | var filter = getFilter(xScale, 'x', normalCurrent, normalStart);
|
114 | this.filterView(view, xScale.field, filter);
|
115 | }
|
116 |
|
117 | if (this.hasDim('y')) {
|
118 | var yScale = view.getYScales()[0];
|
119 | var filter = getFilter(yScale, 'y', normalCurrent, normalStart);
|
120 | this.filterView(view, yScale.field, filter);
|
121 | }
|
122 | this.reRender(view, { source: EVENTS.FILTER });
|
123 | view.emit(EVENTS.AFTER_FILTER, chart_1.Event.fromData(view, EVENTS.AFTER_FILTER, payload));
|
124 | };
|
125 | |
126 |
|
127 |
|
128 | RangeFilter.prototype.end = function () {
|
129 | this.isStarted = false;
|
130 | };
|
131 | |
132 |
|
133 |
|
134 | RangeFilter.prototype.reset = function () {
|
135 | var view = this.context.view;
|
136 | view.emit(EVENTS.BEFORE_RESET, chart_1.Event.fromData(view, EVENTS.BEFORE_RESET, {}));
|
137 | this.isStarted = false;
|
138 | if (this.hasDim('x')) {
|
139 | var xScale = view.getXScale();
|
140 | this.filterView(view, xScale.field, null);
|
141 | }
|
142 | if (this.hasDim('y')) {
|
143 |
|
144 | var yScale = view.getYScales()[0];
|
145 | this.filterView(view, yScale.field, null);
|
146 | }
|
147 | this.reRender(view, { source: EVENTS.RESET });
|
148 | view.emit(EVENTS.AFTER_RESET, chart_1.Event.fromData(view, EVENTS.AFTER_RESET, {}));
|
149 | };
|
150 | |
151 |
|
152 |
|
153 | RangeFilter.prototype.filterView = function (view, field, filter) {
|
154 | view.filter(field, filter);
|
155 | };
|
156 | |
157 |
|
158 |
|
159 |
|
160 | RangeFilter.prototype.reRender = function (view, payload) {
|
161 | view.render(true, payload);
|
162 | };
|
163 | return RangeFilter;
|
164 | }(base_1.default));
|
165 | exports.default = RangeFilter;
|
166 |
|
\ | No newline at end of file |