1 | import { __extends } from "tslib";
|
2 | import { isFunction } from '@antv/util';
|
3 | import { Component, isEqual as equal } from '@antv/f-engine';
|
4 | function isEqual(origin1, origin2, fields) {
|
5 | if (origin1 === origin2) {
|
6 | return true;
|
7 | }
|
8 | for (var i = 0, len = fields.length; i < len; i++) {
|
9 | var field = fields[i];
|
10 | if (origin1[field] !== origin2[field]) {
|
11 | return false;
|
12 | }
|
13 | }
|
14 | return true;
|
15 | }
|
16 | var Selection = function (_super) {
|
17 | __extends(Selection, _super);
|
18 | function Selection(props, context) {
|
19 | var _this = _super.call(this, props, context) || this;
|
20 | var selection = props.selection;
|
21 | if (!selection) return _this;
|
22 | var defaultSelected = selection.defaultSelected;
|
23 | _this.state.selected = defaultSelected;
|
24 | return _this;
|
25 | }
|
26 | Selection.prototype.didMount = function () {
|
27 | var _this = this;
|
28 | var _a = this,
|
29 | props = _a.props,
|
30 | state = _a.state;
|
31 | var selection = props.selection,
|
32 | chart = props.chart;
|
33 | if (!selection) return;
|
34 |
|
35 | var _b = selection.triggerOn,
|
36 | triggerOn = _b === void 0 ? 'click' : _b,
|
37 | onChange = selection.onChange;
|
38 | chart.on(triggerOn, function (ev) {
|
39 | var points = ev.points,
|
40 | x = ev.canvasX,
|
41 | y = ev.canvasY;
|
42 | var point = triggerOn === 'click' ? {
|
43 | x: x,
|
44 | y: y
|
45 | } : points[0];
|
46 | var records = _this.getSnapRecords(point);
|
47 | var _a = selection.type,
|
48 | type = _a === void 0 ? 'single' : _a,
|
49 | _b = selection.cancelable,
|
50 | cancelable = _b === void 0 ? true : _b;
|
51 | if (!records || !records.length) {
|
52 | if (cancelable) {
|
53 | onChange && onChange({
|
54 | selected: null
|
55 | });
|
56 | _this.setState({
|
57 | selected: null
|
58 | });
|
59 | }
|
60 | return;
|
61 | }
|
62 | var selected = state.selected;
|
63 | var origins = records.map(function (record) {
|
64 | return record.origin;
|
65 | });
|
66 | if (!selected || !selected.length) {
|
67 | onChange && onChange({
|
68 | selected: origins
|
69 | });
|
70 | _this.setState({
|
71 | selected: origins
|
72 | });
|
73 | }
|
74 | if (type === 'single') {
|
75 | if (!cancelable) {
|
76 | onChange && onChange({
|
77 | selected: origins
|
78 | });
|
79 | _this.setState({
|
80 | selected: origins
|
81 | });
|
82 | return;
|
83 | }
|
84 | var newSelected_1 = [];
|
85 | records.forEach(function (record) {
|
86 | if (!_this.isSelected(record)) {
|
87 | newSelected_1.push(record.origin);
|
88 | }
|
89 | });
|
90 | onChange && onChange({
|
91 | selected: newSelected_1
|
92 | });
|
93 | _this.setState({
|
94 | selected: newSelected_1
|
95 | });
|
96 | return;
|
97 | }
|
98 |
|
99 | var scales = chart.getScales();
|
100 | var fields = Object.keys(scales);
|
101 | var selectedMap = {};
|
102 | selected.forEach(function (item) {
|
103 | var key = fields.map(function (field) {
|
104 | return item[field];
|
105 | }).join('-');
|
106 | selectedMap[key] = item;
|
107 | });
|
108 | records.forEach(function (record) {
|
109 | var origin = record.origin;
|
110 | var key = fields.map(function (field) {
|
111 | return origin[field];
|
112 | }).join('-');
|
113 | selectedMap[key] = selectedMap[key] ? null : origin;
|
114 | });
|
115 | var newSelected = Object.keys(selectedMap).map(function (key) {
|
116 | return selectedMap[key];
|
117 | }).filter(Boolean);
|
118 | onChange && onChange({
|
119 | selected: newSelected
|
120 | });
|
121 | _this.setState({
|
122 | selected: newSelected
|
123 | });
|
124 | });
|
125 | };
|
126 | Selection.prototype.willReceiveProps = function (nextProps) {
|
127 | var nextSelection = nextProps.selection;
|
128 | var lastSelection = this.props.selection;
|
129 | if (!nextSelection || !lastSelection) {
|
130 | return;
|
131 | }
|
132 | var nextDefaultSelected = nextSelection.defaultSelected;
|
133 | var lastDefaultSelected = lastSelection.defaultSelected;
|
134 | if (!equal(nextDefaultSelected, lastDefaultSelected)) {
|
135 | this.state.selected = nextDefaultSelected;
|
136 | }
|
137 | };
|
138 | Selection.prototype.getSnapRecords = function (_point) {
|
139 | return null;
|
140 | };
|
141 | Selection.prototype.isSelected = function (record) {
|
142 | var _a = this,
|
143 | state = _a.state,
|
144 | props = _a.props;
|
145 | var selected = state.selected;
|
146 | if (!selected || !selected.length) {
|
147 | return false;
|
148 | }
|
149 | var chart = props.chart;
|
150 | var scales = chart.getScales();
|
151 | var fields = Object.keys(scales);
|
152 | for (var i = 0, len = selected.length; i < len; i++) {
|
153 | var item = selected[i];
|
154 | if (isEqual(record.origin, item, fields)) {
|
155 | return true;
|
156 | }
|
157 | }
|
158 | return false;
|
159 | };
|
160 | Selection.prototype.getSelectionStyle = function (record) {
|
161 | var _a = this,
|
162 | state = _a.state,
|
163 | props = _a.props;
|
164 | var selected = state.selected;
|
165 | if (!selected || !selected.length) {
|
166 | return null;
|
167 | }
|
168 | var selection = props.selection;
|
169 | var selectedStyle = selection.selectedStyle,
|
170 | unSelectedStyle = selection.unSelectedStyle;
|
171 | var isSelected = this.isSelected(record);
|
172 | if (isSelected) {
|
173 | return isFunction(selectedStyle) ? selectedStyle(record) : selectedStyle;
|
174 | }
|
175 | return isFunction(unSelectedStyle) ? unSelectedStyle(record) : unSelectedStyle;
|
176 | };
|
177 | return Selection;
|
178 | }(Component);
|
179 | export default Selection; |
\ | No newline at end of file |