UNPKG

@antv/f2

Version:

Charts for mobile visualization.

183 lines (182 loc) 6.28 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper")); var _util = require("@antv/util"); var _component = _interopRequireDefault(require("../../base/component")); var _equal = _interopRequireDefault(require("../../base/equal")); function isEqual(origin1, origin2, fields) { if (origin1 === origin2) { return true; } for (var i = 0, len = fields.length; i < len; i++) { var field = fields[i]; if (origin1[field] !== origin2[field]) { return false; } } return true; } var Selection = /*#__PURE__*/function (_Component) { (0, _inherits2.default)(Selection, _Component); var _super = (0, _createSuper2.default)(Selection); function Selection(props, context) { var _this; (0, _classCallCheck2.default)(this, Selection); _this = _super.call(this, props, context); var selection = props.selection; if (!selection) return (0, _possibleConstructorReturn2.default)(_this); var defaultSelected = selection.defaultSelected; _this.state.selected = defaultSelected; return _this; } (0, _createClass2.default)(Selection, [{ key: "didMount", value: function didMount() { var _this2 = this; var props = this.props, state = this.state, container = this.container; var canvas = container.get('canvas'); var selection = props.selection, chart = props.chart; if (!selection) return; // 默认为 click var _selection$triggerOn = selection.triggerOn, triggerOn = _selection$triggerOn === void 0 ? 'click' : _selection$triggerOn; canvas.on(triggerOn, function (ev) { var points = ev.points; var records = _this2.getSnapRecords(points[0]); var _selection$type = selection.type, type = _selection$type === void 0 ? 'single' : _selection$type, _selection$cancelable = selection.cancelable, cancelable = _selection$cancelable === void 0 ? true : _selection$cancelable; if (!records || !records.length) { if (cancelable) { _this2.setState({ selected: null }); } return; } var selected = state.selected; var origins = records.map(function (record) { return record.origin; }); if (!selected || !selected.length) { _this2.setState({ selected: origins }); } if (type === 'single') { if (!cancelable) { _this2.setState({ selected: origins }); return; } var _newSelected = []; records.forEach(function (record) { if (!_this2.isSelected(record)) { _newSelected.push(record.origin); } }); _this2.setState({ selected: _newSelected }); return; } // 多选 var scales = chart.getScales(); var fields = Object.keys(scales); var selectedMap = {}; selected.forEach(function (item) { var key = fields.map(function (field) { return item[field]; }).join('-'); selectedMap[key] = item; }); records.forEach(function (record) { var origin = record.origin; var key = fields.map(function (field) { return origin[field]; }).join('-'); selectedMap[key] = selectedMap[key] ? null : origin; }); var newSelected = Object.keys(selectedMap).map(function (key) { return selectedMap[key]; }).filter(Boolean); _this2.setState({ selected: newSelected }); }); } }, { key: "willReceiveProps", value: function willReceiveProps(nextProps) { var nextSelection = nextProps.selection; var lastSelection = this.props.selection; if (!nextSelection || !lastSelection) { return; } var nextDefaultSelected = nextSelection.defaultSelected; var lastDefaultSelected = lastSelection.defaultSelected; if (!(0, _equal.default)(nextDefaultSelected, lastDefaultSelected)) { this.state.selected = nextDefaultSelected; } } }, { key: "getSnapRecords", value: function getSnapRecords(_point) { return null; } }, { key: "isSelected", value: function isSelected(record) { var state = this.state, props = this.props; var selected = state.selected; if (!selected || !selected.length) { return false; } var chart = props.chart; var scales = chart.getScales(); var fields = Object.keys(scales); for (var i = 0, len = selected.length; i < len; i++) { var item = selected[i]; if (isEqual(record.origin, item, fields)) { return true; } } return false; } }, { key: "getSelectionStyle", value: function getSelectionStyle(record) { var state = this.state, props = this.props; var selected = state.selected; if (!selected || !selected.length) { return null; } var selection = props.selection; var selectedStyle = selection.selectedStyle, unSelectedStyle = selection.unSelectedStyle; var isSelected = this.isSelected(record); if (isSelected) { return (0, _util.isFunction)(selectedStyle) ? selectedStyle(record) : selectedStyle; } return (0, _util.isFunction)(unSelectedStyle) ? unSelectedStyle(record) : unSelectedStyle; } }]); return Selection; }(_component.default); var _default = Selection; exports.default = _default;