UNPKG

dareway-rui

Version:

432 lines (369 loc) 17.4 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 _propTypes = _interopRequireDefault(require('prop-types')); var _antd = require('antd'); var _util = require('../../../../util'); var _DateMask = require('../../../mask/date/DateMask'); var _date = require('../../../mask/date'); var _FrameConstants = require('../../../../constants/FrameConstants'); var _moment = _interopRequireDefault(require('moment')); var _DatePicker = _interopRequireDefault(require('../../../DatePicker')); var _generator = require('../../utils/generator'); var EditInput = /*#__PURE__*/ (function(_React$PureComponent) { (0, _inherits2.default)(EditInput, _React$PureComponent); function EditInput(props) { var _this; (0, _classCallCheck2.default)(this, EditInput); _this = (0, _possibleConstructorReturn2.default)( this, (0, _getPrototypeOf2.default)(EditInput).call(this, props) ); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'setCurrentEditing', function() { var _this$props = _this.props, setCurrentEditColName = _this$props.setCurrentEditColName, name = _this$props.name; setCurrentEditColName(name); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'checkValid', function() { try { var mask = _this.props.mask; (0, _DateMask.validDateTime)(mask, _this.state.value); } catch (ex) { _util.MsgBox.error(ex.message); _this.setState({ cursorPos: 0 }); _this.setCurrentEditing(); return false; } return true; }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'handleBlur', function(event) { var result = _this.checkValid(); if (!result) { return; } _this.setState({ cursorPos: -1 }); // 同步 model 数据 var _this$props2 = _this.props, mask = _this$props2.mask, sourceMask = _this$props2.sourceMask; var _this$props3 = _this.props, name = _this$props3.name, rowNum = _this$props3.rowNum, syncCellValue = _this$props3.syncCellValue; var maskedValue = _this.state.value; var newValue = null; if (!(0, _DateMask.isEmptyDate)(mask, maskedValue)) { newValue = (0, _date.normalizeDate)(maskedValue, mask, mask); } else { newValue = null; } syncCellValue(rowNum, name, newValue); // 触发 onBlur var _this$props4 = _this.props, oldValue = _this$props4.value, onBlur = _this$props4.onBlur; if (onBlur) { onBlur(newValue, oldValue); } }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'handleChange', function(event) { var oldValue = _this.state.value; var newValue = event.target.value; var ele = document.getElementById(_this.domId); var cursorPosAfterChange = ele.selectionStart; var mask = _this.props.mask; var data = (0, _DateMask.normalizeInput)(mask, oldValue, newValue, cursorPosAfterChange); if (data) { var value = data.value, cursorPos = data.cursorPos; _this.setState({ value: value, cursorPos: cursorPos }); } }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'moveCursor', function() { var cursorPos = _this.state.cursorPos; if (cursorPos === -1) { return; } var ele = document.getElementById(_this.domId); (0, _DateMask.setCursor)(ele, cursorPos); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'handleKeyDown', function( event ) { var key = event.which; if ( key === _FrameConstants.KEY_CODE.TAB || key === _FrameConstants.KEY_CODE.ENTER || key === _FrameConstants.KEY_CODE.UPARROW || key === _FrameConstants.KEY_CODE.DOWNARROW ) { var result = _this.checkValid(); if (!result) { return; } _this.handleBlur(); } var onKeyDown = _this.props.onKeyDown; if (onKeyDown) { onKeyDown(event); } }); (0, _defineProperty2.default)( (0, _assertThisInitialized2.default)(_this), 'handleDatePickerPosition', function(open) { setTimeout(function() { var datePickerDom = document.querySelector('.ant-calendar-picker-container'); if (datePickerDom) { var datePickerClassName = datePickerDom.className; if ( datePickerClassName.indexOf('ant-calendar-picker-container-placement-bottomLeft') === -1 ) { _this.setState({ placement: 'topLeft' }); } } }, 0); } ); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'handleFocus', function() { var mask = _this.props.mask; if (!_this.state.value) { _this.setState({ value: (0, _DateMask.formatDateTime)(mask), cursorPos: 0 }); } }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'handleClick', function(event) { var ele = _this.inputRef.current; var cursorPos = ele.selectionStart; // 鼠标点击的时候,弹出日历选择框; _this.setState(function(prevStatus) { if (prevStatus.calendarOpenState === true) { return null; } return { calendarOpenState: true, cursorPos: cursorPos }; }); _this.handleDatePickerPosition(); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onIconClick', function() { _this.handleClick(); _this.inputRef.current.focus(); }); (0, _defineProperty2.default)( (0, _assertThisInitialized2.default)(_this), 'handleCalendarDateChange', function(m) { var _this$props5 = _this.props, mask = _this$props5.mask, sourceMask = _this$props5.sourceMask; var momentStr = m.format('YYYYMMDDHHmmss'); var dateValue = _util.DateUtil.stringToDate( momentStr, _FrameConstants.DAREWAY_STANDARD_DATETIME_TRANSFORM_FORMAT ); var maskedValue = (0, _date.getMaskedValue)(dateValue, mask, sourceMask); _this.setState({ value: maskedValue, calendarOpenState: false // 选择日期后,关闭日历组件, }); } ); (0, _defineProperty2.default)( (0, _assertThisInitialized2.default)(_this), 'handleCalendarTimeChange', function(m) { var _this$props6 = _this.props, mask = _this$props6.mask, sourceMask = _this$props6.sourceMask; var momentStr = m.format('YYYYMMDDHHmmss'); var dateValue = _util.DateUtil.stringToDate( momentStr, _FrameConstants.DAREWAY_STANDARD_DATETIME_TRANSFORM_FORMAT ); var maskedValue = (0, _date.getMaskedValue)(dateValue, mask, sourceMask); _this.setState({ value: maskedValue }); } ); var _this$props7 = _this.props, _mask = _this$props7.mask, _sourceMask = _this$props7.sourceMask, _value = _this$props7.value, defaultCalendarOpen = _this$props7.defaultCalendarOpen; _this.state = { value: (0, _date.getMaskedValue)(_value, _mask, _sourceMask), calendarOpenState: defaultCalendarOpen, cursorPos: 0, placement: 'bottomLeft' }; _this.inputRef = _react.default.createRef(); _this.domId = 'DateColumn' + (0, _util.uuid)(); return _this; } (0, _createClass2.default)(EditInput, [ { key: 'componentDidMount', value: function componentDidMount() { this.moveCursor(); this.handleDatePickerPosition(); } }, { key: 'componentDidUpdate', value: function componentDidUpdate(prevProps, prevState, snapshot) { this.moveCursor(); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { if (this.props.handleWhenDestory) { this.props.handleWhenDestory(); } } }, { key: 'render', value: function render() { var _this$props8 = this.props, name = _this$props8.name, bodyAlign = _this$props8.bodyAlign, bodyFontColor = _this$props8.bodyFontColor, bodyBold = _this$props8.bodyBold, bodyOblique = _this$props8.bodyOblique, bodyStyleFilter = _this$props8.bodyStyleFilter, width = _this$props8.width, mask = _this$props8.mask; var _this$state = this.state, value = _this$state.value, calendarOpenState = _this$state.calendarOpenState; var style = (0, _generator.generateEditCellStyle)({}); if (bodyAlign) { style['textAlign'] = bodyAlign; } if (bodyFontColor) { style['color'] = bodyFontColor; } if (bodyBold) { style['fontWeight'] = 'bold'; } if (bodyOblique) { style['fontStyle'] = 'oblique'; } // TODO 由于 Date 在录入过程中可能存在非法值,所以不提供给业务过滤功能; // if (bodyStyleFilter) { // const extraStyles = bodyStyleFilter({ [name]: this.state.value }); // if (extraStyles) { // if (extraStyles.color) { // style['color'] = extraStyles.color; // } // // if (extraStyles.bold) { // style['fontWeight'] = 'bold'; // } // // if (extraStyles.oblique) { // style['fontStyle'] = 'oblique'; // } // } // } return _react.default.createElement( 'div', null, _react.default.createElement( 'div', { style: { position: 'relative' } }, _react.default.createElement(_antd.Input, { type: 'text', style: style, id: this.domId, key: this.domId, ref: this.inputRef, value: value, onKeyDown: this.handleKeyDown, onChange: this.handleChange, onBlur: this.handleBlur, onClick: this.handleClick, onFocus: this.handleFocus }), _react.default.createElement(_DatePicker.default, { disabled: false, showToday: true, isForGrid: true, open: calendarOpenState, placement: this.state.placement, value: value && (0, _moment.default)(value).isValid() ? (0, _moment.default)(value) : undefined, showTime: mask.indexOf('hh') > -1 || mask.indexOf('mm') > -1 || mask.indexOf('ss') > -1 ? true : false, forceRender: true, onDateChange: this.handleCalendarDateChange, onTimeChange: this.handleCalendarTimeChange, onOpenChange: this.handleDatePickerPosition, onOk: this.handleCalendarDateChange, onIconClick: this.onIconClick }) ) ); } } ]); return EditInput; })(_react.default.PureComponent); exports.default = EditInput; (0, _defineProperty2.default)(EditInput, 'propTypes', { name: _propTypes.default.string, value: _propTypes.default.object, rowNum: _propTypes.default.number, mask: _propTypes.default.string, bodyAlign: _propTypes.default.string, bodyBold: _propTypes.default.bool, bodyFontColor: _propTypes.default.string, bodyOblique: _propTypes.default.bool, bodyStyleFilter: _propTypes.default.func, onBlur: _propTypes.default.func, onKeyDown: _propTypes.default.func, syncCellValue: _propTypes.default.func, setCurrentEditColName: _propTypes.default.func, width: _propTypes.default.number, defaultCalendarOpen: _propTypes.default.bool, handleWhenDestory: _propTypes.default.func, //DatePicker的事件 onDateChange: _propTypes.default.func, onTimeChange: _propTypes.default.func, onCalendarOk: _propTypes.default.func, onIconClick: _propTypes.default.func }); //@ sourceMappingURL=EditInput.js.map