UNPKG

@alifd/next

Version:

A configurable component library for web built on React.

228 lines (186 loc) 7.35 kB
'use strict'; exports.__esModule = true; exports.default = undefined; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _class, _temp; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _util = require('../../util'); var _balloon = require('../../balloon'); var _balloon2 = _interopRequireDefault(_balloon); var _utils = require('../utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Tooltip = _balloon2.default.Tooltip; var noop = _util.func.noop; function _getStyle(min, max, value, rtl) { if (rtl) { return { left: (0, _utils.getPercent)(min, max, max + min - value[1]) + '%', right: (0, _utils.getPercent)(min, max, value[0]) + '%' }; } return { left: (0, _utils.getPercent)(min, max, value[0]) + '%', right: 100 - (0, _utils.getPercent)(min, max, value[1]) + '%' }; } function sliderFrag(props) { var prefix = props.prefix, min = props.min, max = props.max, value = props.value, disabled = props.disabled, onMouseEnter = props.onMouseEnter, onMouseLeave = props.onMouseLeave, onMouseDown = props.onMouseDown, rtl = props.rtl; var activeClass = !disabled && props.hasMovingClass ? prefix + 'range-active' : ''; return _react2.default.createElement( 'div', { className: prefix + 'range-frag ' + activeClass, style: _getStyle(min, max, value, rtl), onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseDown: onMouseDown }, _react2.default.createElement('div', { className: prefix + 'range-selected' }), _react2.default.createElement( 'div', { className: prefix + 'range-slider' }, _react2.default.createElement('div', { className: prefix + 'range-slider-inner' }) ), _react2.default.createElement( 'div', { className: prefix + 'range-slider' }, _react2.default.createElement('div', { className: prefix + 'range-slider-inner' }) ) ); } sliderFrag.propTypes = { prefix: _propTypes2.default.string, min: _propTypes2.default.number, max: _propTypes2.default.number, hasMovingClass: _propTypes2.default.bool, onMouseEnter: _propTypes2.default.func, onMouseLeave: _propTypes2.default.func, onMouseDown: _propTypes2.default.func, value: _propTypes2.default.arrayOf(_propTypes2.default.number), disabled: _propTypes2.default.bool, rtl: _propTypes2.default.bool }; var FixedSlider = (_temp = _class = function (_React$Component) { (0, _inherits3.default)(FixedSlider, _React$Component); function FixedSlider(props) { (0, _classCallCheck3.default)(this, FixedSlider); var _this = (0, _possibleConstructorReturn3.default)(this, _React$Component.call(this, props)); _this.state = { hasMovingClass: false, onTooltipVisibleChange: false, tooltipAnimation: true }; return _this; } FixedSlider.prototype._onMouseEnter = function _onMouseEnter() { if (!(this.keyState === 'down')) { this.keyState = 'enter'; } this.setState({ hasMovingClass: true }); }; FixedSlider.prototype._onMouseLeave = function _onMouseLeave() { if (this.keyState === 'enter') { this.setState({ hasMovingClass: false }); } }; FixedSlider.prototype._onMouseDown = function _onMouseDown() { this.keyState = 'down'; this.setState({ hasMovingClass: true }); this._addDocumentEvents(); }; FixedSlider.prototype._onMouseUp = function _onMouseUp() { if (this.keyState === 'down') { this.keyState = ''; this._removeDocumentEvents(); this.setState({ hasMovingClass: false }); } }; FixedSlider.prototype._addDocumentEvents = function _addDocumentEvents() { this._onMouseUpListener = _util.events.on(document, 'mouseup', this._onMouseUp.bind(this)); }; FixedSlider.prototype._removeDocumentEvents = function _removeDocumentEvents() { if (this._onMouseUpListener) { this._onMouseUpListener.off(); this._onMouseUpListener = null; } }; FixedSlider.prototype.render = function render() { var _props = this.props, hasTip = _props.hasTip, value = _props.value, tipRender = _props.tipRender, tooltipVisible = _props.tooltipVisible, hasMovingClass = _props.hasMovingClass; var addedProps = { hasMovingClass: hasMovingClass || this.state.hasMovingClass, onMouseEnter: this._onMouseEnter.bind(this), onMouseLeave: this._onMouseLeave.bind(this), onMouseDown: this._onMouseDown.bind(this) }; return hasTip ? _react2.default.createElement( Tooltip, { popupContainer: function popupContainer(target) { return target.parentNode; }, popupProps: { visible: tooltipVisible || hasMovingClass, animation: this.state.tooltipAnimation ? { in: 'expandInUp', out: 'expandOutDown' } : false }, trigger: sliderFrag((0, _extends3.default)({}, this.props, addedProps)), align: 't' }, tipRender(value[0] + '-' + value[1]) ) : sliderFrag((0, _extends3.default)({}, this.props, addedProps)); }; return FixedSlider; }(_react2.default.Component), _class.propTypes = { hasTip: _propTypes2.default.bool, tooltipVisible: _propTypes2.default.bool, onTooltipVisibleChange: _propTypes2.default.func, tooltipAnimation: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.object]), value: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.arrayOf(_propTypes2.default.number)]), tipRender: _propTypes2.default.func, disabled: _propTypes2.default.bool, hasMovingClass: _propTypes2.default.bool, rtl: _propTypes2.default.bool }, _class.defaultProps = { disabled: false, hasTip: true, onChange: noop, onProcess: noop, tipRender: function tipRender(value) { return value; }, reverse: false, rtl: false }, _temp); FixedSlider.displayName = 'FixedSlider'; exports.default = FixedSlider; module.exports = exports['default'];