UNPKG

dareway-rui

Version:

296 lines (254 loc) 11.7 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 _getPrototypeOf2 = _interopRequireDefault(require('@babel/runtime/helpers/getPrototypeOf')); var _assertThisInitialized2 = _interopRequireDefault(require('@babel/runtime/helpers/assertThisInitialized')); var _inherits2 = _interopRequireDefault(require('@babel/runtime/helpers/inherits')); var _defineProperty2 = _interopRequireDefault(require('@babel/runtime/helpers/defineProperty')); var _react = _interopRequireDefault(require('react')); var _reactDom = _interopRequireDefault(require('react-dom')); var _propTypes = _interopRequireDefault(require('prop-types')); var _KeyCode = _interopRequireDefault(require('rc-util/lib/KeyCode')); var _reactLifecyclesCompat = require('react-lifecycles-compat'); var _moment = _interopRequireDefault(require('moment')); var _util = require('../util'); var cachedSelectionStart; var cachedSelectionEnd; var dateInputInstance; var DateInput = /*#__PURE__*/ (function(_React$Component) { (0, _inherits2.default)(DateInput, _React$Component); function DateInput(props) { var _this; (0, _classCallCheck2.default)(this, DateInput); _this = (0, _possibleConstructorReturn2.default)( this, (0, _getPrototypeOf2.default)(DateInput).call(this, props) ); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onClear', function() { _this.setState({ str: '' }); _this.props.onClear(null); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onInputChange', function( event ) { var str = event.target.value; var _this$props = _this.props, disabledDate = _this$props.disabledDate, format = _this$props.format, onChange = _this$props.onChange, selectedValue = _this$props.selectedValue; // 没有内容,合法并直接退出 if (!str) { onChange(null); _this.setState({ invalid: false, str: str }); return; } // 不合法直接退出 var parsed = (0, _moment.default)(str, format, true); if (!parsed.isValid()) { _this.setState({ invalid: true, str: str }); return; } var value = _this.props.value.clone(); value .year(parsed.year()) .month(parsed.month()) .date(parsed.date()) .hour(parsed.hour()) .minute(parsed.minute()) .second(parsed.second()); if (!value || (disabledDate && disabledDate(value))) { _this.setState({ invalid: true, str: str }); return; } if (selectedValue !== value || (selectedValue && value && !selectedValue.isSame(value))) { _this.setState({ invalid: false, str: str }); onChange(value); } }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onFocus', function() { _this.setState({ hasFocus: true }); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onBlur', function() { _this.setState(function(prevState, prevProps) { return { hasFocus: false, str: (0, _util.formatDate)(prevProps.value, prevProps.format) }; }); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onKeyDown', function(_ref) { var keyCode = _ref.keyCode; var _this$props2 = _this.props, onSelect = _this$props2.onSelect, value = _this$props2.value, disabledDate = _this$props2.disabledDate; if (keyCode === _KeyCode.default.ENTER && onSelect) { var validateDate = !disabledDate || !disabledDate(value); if (validateDate) { onSelect(value.clone()); } } }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'getRootDOMNode', function() { return _reactDom.default.findDOMNode((0, _assertThisInitialized2.default)(_this)); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'focus', function() { if (dateInputInstance) { // dateInputInstance.focus(); } }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'saveDateInput', function( dateInput ) { dateInputInstance = dateInput; }); var _selectedValue = props.selectedValue; _this.state = { str: (0, _util.formatDate)(_selectedValue, _this.props.format), invalid: false, hasFocus: false }; return _this; } (0, _createClass2.default)( DateInput, [ { key: 'componentDidUpdate', value: function componentDidUpdate() { if ( dateInputInstance && this.state.hasFocus && !this.state.invalid && !(cachedSelectionStart === 0 && cachedSelectionEnd === 0) ) { dateInputInstance.setSelectionRange(cachedSelectionStart, cachedSelectionEnd); } } }, { key: 'render', value: function render() { var props = this.props; var _this$state = this.state, invalid = _this$state.invalid, str = _this$state.str; var locale = props.locale, prefixCls = props.prefixCls, placeholder = props.placeholder, clearIcon = props.clearIcon; var invalidClass = invalid ? ''.concat(prefixCls, '-input-invalid') : ''; return _react.default.createElement( 'div', { className: ''.concat(prefixCls, '-input-wrap') }, _react.default.createElement( 'div', { className: ''.concat(prefixCls, '-date-input-wrap') }, _react.default.createElement('input', { ref: this.saveDateInput, className: ''.concat(prefixCls, '-input ').concat(invalidClass), value: str, disabled: props.disabled, placeholder: placeholder, onChange: this.onInputChange, onKeyDown: this.onKeyDown, onFocus: this.onFocus, onBlur: this.onBlur }) ), props.showClear ? _react.default.createElement( 'a', { role: 'button', title: locale.clear, onClick: this.onClear }, clearIcon || _react.default.createElement('span', { className: ''.concat(prefixCls, '-clear-btn') }) ) : null ); } } ], [ { key: 'getDerivedStateFromProps', value: function getDerivedStateFromProps(nextProps, state) { var newState = {}; if (dateInputInstance) { cachedSelectionStart = dateInputInstance.selectionStart; cachedSelectionEnd = dateInputInstance.selectionEnd; } // when popup show, click body will call this, bug! var selectedValue = nextProps.selectedValue; if (!state.hasFocus) { newState = { str: (0, _util.formatDate)(selectedValue, nextProps.format), invalid: false }; } return newState; } }, { key: 'getInstance', value: function getInstance() { return dateInputInstance; } } ] ); return DateInput; })(_react.default.Component); (0, _defineProperty2.default)(DateInput, 'propTypes', { prefixCls: _propTypes.default.string, timePicker: _propTypes.default.object, value: _propTypes.default.object, disabledTime: _propTypes.default.any, format: _propTypes.default.oneOfType([ _propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string) ]), locale: _propTypes.default.object, disabledDate: _propTypes.default.func, onChange: _propTypes.default.func, onClear: _propTypes.default.func, placeholder: _propTypes.default.string, onSelect: _propTypes.default.func, selectedValue: _propTypes.default.object, clearIcon: _propTypes.default.node }); (0, _reactLifecyclesCompat.polyfill)(DateInput); var _default = DateInput; exports.default = _default; //@ sourceMappingURL=DateInput.js.map