UNPKG

@data-ui/xy-chart

Version:

A package of charts with standard x- and y- axes. https://williaster.github.io/data-ui

149 lines (130 loc) 4.5 kB
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } /* eslint react/jsx-handler-names: 0 */ import React from 'react'; import PropTypes from 'prop-types'; import { localPoint } from '@vx/event'; var propTypes = { children: PropTypes.func.isRequired, width: PropTypes.number.isRequired, height: PropTypes.number.isRequired, captureDragArea: PropTypes.bool, resetOnStart: PropTypes.bool, onDragStart: PropTypes.func, onDragMove: PropTypes.func.isRequired, onDragEnd: PropTypes.func.isRequired }; var defaultProps = { captureDragArea: true, resetOnStart: false, onDragStart: null }; var Drag = /*#__PURE__*/ function (_React$Component) { _inheritsLoose(Drag, _React$Component); function Drag(props) { var _this; _this = _React$Component.call(this, props) || this; _this.state = { x: undefined, y: undefined, dx: 0, dy: 0, isDragging: false }; _this.dragEnd = _this.dragEnd.bind(_assertThisInitialized(_assertThisInitialized(_this))); _this.dragMove = _this.dragMove.bind(_assertThisInitialized(_assertThisInitialized(_this))); _this.dragStart = _this.dragStart.bind(_assertThisInitialized(_assertThisInitialized(_this))); return _this; } var _proto = Drag.prototype; _proto.dragStart = function dragStart(event) { var _this$props = this.props, onDragStart = _this$props.onDragStart, resetOnStart = _this$props.resetOnStart; var _this$state = this.state, dx = _this$state.dx, dy = _this$state.dy; var point = localPoint(event); var nextState = _extends({}, this.state, { isDragging: true, dx: resetOnStart ? 0 : dx, dy: resetOnStart ? 0 : dy, x: resetOnStart ? point.x : -dx + point.x, y: resetOnStart ? point.y : -dy + point.y }); if (onDragStart) onDragStart(_extends({}, nextState, { event: event })); this.setState(function () { return nextState; }); }; _proto.dragMove = function dragMove(event) { var onDragMove = this.props.onDragMove; var _this$state2 = this.state, x = _this$state2.x, y = _this$state2.y, isDragging = _this$state2.isDragging; if (!isDragging) return; var point = localPoint(event); var nextState = _extends({}, this.state, { isDragging: true, dx: -(x - point.x), dy: -(y - point.y) }); if (onDragMove) onDragMove(_extends({}, nextState, { event: event })); this.setState(function () { return nextState; }); }; _proto.dragEnd = function dragEnd(event) { var onDragEnd = this.props.onDragEnd; var nextState = _extends({}, this.state, { isDragging: false }); if (onDragEnd) onDragEnd(_extends({}, nextState, { event: event })); this.setState(function () { return nextState; }); }; _proto.render = function render() { var _this$state3 = this.state, x = _this$state3.x, y = _this$state3.y, dx = _this$state3.dx, dy = _this$state3.dy, isDragging = _this$state3.isDragging; var _this$props2 = this.props, children = _this$props2.children, width = _this$props2.width, height = _this$props2.height, captureDragArea = _this$props2.captureDragArea; return React.createElement("g", null, isDragging && captureDragArea && React.createElement("rect", { width: width, height: height, onMouseMove: this.dragMove, onMouseUp: this.dragEnd, fill: "transparent" }), children({ x: x, y: y, dx: dx, dy: dy, isDragging: isDragging, dragEnd: this.dragEnd, dragMove: this.dragMove, dragStart: this.dragStart })); }; return Drag; }(React.Component); export { Drag as default }; Drag.propTypes = propTypes; Drag.defaultProps = defaultProps;