UNPKG

5.29 kBJavaScriptView Raw
1import { __extends } from "tslib";
2import { isFunction } from '@antv/util';
3import { Component, isEqual as equal } from '@antv/f-engine';
4function 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}
16var Selection = /** @class */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 // 默认为 click
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);
179export default Selection;
\No newline at end of file