UNPKG

dh-c

Version:

The front-end development engineers jimberton gulp react component

327 lines (265 loc) 11.9 kB
'use strict'; exports.__esModule = true; var _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; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _classnames4 = require('classnames'); var _classnames5 = _interopRequireDefault(_classnames4); var _Picker = require('rc-calendar/lib/Picker'); var _Picker2 = _interopRequireDefault(_Picker); var _RangeCalendar = require('rc-calendar/lib/RangeCalendar'); var _RangeCalendar2 = _interopRequireDefault(_RangeCalendar); var _Panel = require('rc-time-picker/lib/Panel'); var _Panel2 = _interopRequireDefault(_Panel); var _zh_CN = require('./locale/zh_CN'); var _zh_CN2 = _interopRequireDefault(_zh_CN); var _en_US = require('./locale/en_US'); var _en_US2 = _interopRequireDefault(_en_US); var _moment = require('moment'); var _moment2 = _interopRequireDefault(_moment); require('moment/locale/zh-cn'); require('moment/locale/en-gb'); require('rc-calendar/assets/index.css'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // import { Icon } from '../index' var prefixCls = 'dh-calendar'; var RangeDateCalendar = function (_Component) { _inherits(RangeDateCalendar, _Component); function RangeDateCalendar(props) { _classCallCheck(this, RangeDateCalendar); var _this = _possibleConstructorReturn(this, _Component.call(this, props)); _this.setRangeIdx = function (ranges, range) { return Object.keys(ranges).findIndex(function (d) { return d === range; }); }; _this.format = function (v) { return v ? v.format(_this.props.format) : ''; }; _this.isValidRange = function (v) { return v && v[0] && v[1]; }; _this.getDatestring = function (value) { if (Array.isArray(value) && value.length > 1) return [_this.format(value[0]), _this.format(value[1])]; }; _this.onChange = function (value) { _this.setState({ value: value }); }; _this.handleChange = function (value, rangeIdx) { if (_this.props.onChange && Array.isArray(value) && value.length > 1) { var rangeStr = Object.keys(_this.props.ranges).find(function (d, i) { return i === rangeIdx; }) || null; var datestring = _this.getDatestring(value); _this.props.onChange(value, datestring, rangeStr); _this.setState({ rangeIdx: -1 }); } }; _this.handleOk = function (value) { if (_this.props.onOk) { _this.props.onOk(value); } }; _this.handleClear = function (e) { e.preventDefault(); e.stopPropagation(); _this.setState({ value: [] }); if (_this.props.onClear) { _this.props.onClear(); } }; _this.handleOpenChange = function (open) { _this.setState({ open: open }); }; _this.setValue = function (value, idx) { _this.handleChange(value, idx); _this.setState({ value: value, rangeIdx: idx, open: !_this.state.open }); }; _this.clearHoverValue = function () { return _this.setState({ hoverValue: [] }); }; _this.renderFooter = function () { var ranges = _this.props.ranges; if (!ranges) { return null; } var operations = Object.keys(ranges || {}).map(function (range, idx) { var _classnames; var value = ranges[range]; return _react2.default.createElement( 'a', { className: (0, _classnames5.default)((_classnames = {}, _classnames[prefixCls + '-range-quick-selector-actived'] = idx == _this.state.rangeIdx, _classnames)), key: range, onClick: function onClick() { return _this.setValue(value, idx); } // onMouseEnter={() => this.setState({ hoverValue: value })} // onMouseLeave={this.clearHoverValue} }, range ); }); var rangeNode = _react2.default.createElement( 'div', { className: prefixCls + '-footer-extra ' + prefixCls + '-range-quick-selector', key: 'range' }, operations ); return [rangeNode]; }; _this.renderCalendar = function () { var _classnames2; var _this$props = _this.props, prefixCls = _this$props.prefixCls, locale = _this$props.locale, showTime = _this$props.showTime, showToday = _this$props.showToday, ranges = _this$props.ranges, dateInputPlaceholder = _this$props.dateInputPlaceholder, showDateInput = _this$props.showDateInput, wrapperClassName = _this$props.wrapperClassName, theme = _this$props.theme, restProps = _objectWithoutProperties(_this$props, ['prefixCls', 'locale', 'showTime', 'showToday', 'ranges', 'dateInputPlaceholder', 'showDateInput', 'wrapperClassName', 'theme']); var timePickerElement = _react2.default.createElement(_Panel2.default, { prefixCls: 'dh-calendar-time-picker', defaultValue: (0, _moment2.default)('00:00:00', 'HH:mm:ss') }); return _react2.default.createElement(_RangeCalendar2.default, { prefixCls: prefixCls, className: (0, _classnames5.default)((_classnames2 = {}, _classnames2[prefixCls + '-dark'] = theme === 'dark', _classnames2['dh-calendar-time'] = showTime, _classnames2[prefixCls + '-range-with-ranges'] = ranges, _classnames2['dh-calendar-input-wrap-disabled'] = !showDateInput, _classnames2['' + wrapperClassName] = wrapperClassName, _classnames2)), showToday: showToday, locale: locale, style: { zIndex: 1000 }, dateInputPlaceholder: dateInputPlaceholder, timePicker: showTime ? timePickerElement : null, renderFooter: _this.renderFooter // onValueChange={this.handleValueChange} , onChange: _this.handleChange, onOk: _this.handleOk }); }; _this.state = { value: props.value || props.defaultValue, rangeIdx: _this.setRangeIdx(props.ranges, props.range || props.defaultRange), open: false }; return _this; } RangeDateCalendar.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { if (nextProps.value !== this.props.value || nextProps.range !== this.props.range) { this.setState({ value: nextProps.value, rangeIdx: this.setRangeIdx(nextProps.ranges, nextProps.range) }); } }; // getShowDateFromValue = () => { // // const [start, end] = value; // const start = moment() // // value could be an empty array, then we should not reset showDate // if (!start && !end) { // return; // } // const newEnd = end && end.isSame(start, 'month') ? end.clone().add(1, 'month') : end; // return [start, newEnd]; // } // handleValueChange = (value) => { // // this.setState({selectedValue: value}) // } RangeDateCalendar.prototype.render = function render() { var _this2 = this; var _state = this.state, value = _state.value, open = _state.open; var _props = this.props, disabled = _props.disabled, locale = _props.locale, rangePlaceholder = _props.rangePlaceholder, showClear = _props.showClear, className = _props.className, theme = _props.theme; return _react2.default.createElement( _Picker2.default, { animation: 'slide-up', locale: locale, disabled: disabled, onChange: this.onChange, calendar: this.renderCalendar(), value: value, open: open, onOpenChange: this.handleOpenChange }, function (_ref) { var _classnames3; var value = _ref.value; return _react2.default.createElement( 'div', { className: (0, _classnames5.default)('dh-calendar-picker', (_classnames3 = {}, _classnames3['' + className] = className, _classnames3['dh-calendar-picker-dark'] = theme === 'dark', _classnames3)) }, _react2.default.createElement( 'span', { className: 'dh-calendar-picker-input' }, _react2.default.createElement('input', { placeholder: rangePlaceholder[0], style: _extends({}, _this2.props.style), disabled: disabled, readOnly: true, className: 'dh-calendar-range-picker-input', value: _this2.isValidRange(value) && '' + _this2.format(value[0]) || '' }), _react2.default.createElement( 'span', { className: 'dh-calendar-range-picker-separator' }, '~' ), _react2.default.createElement('input', { placeholder: rangePlaceholder[1], style: _extends({}, _this2.props.style), disabled: disabled, readOnly: true, className: 'dh-calendar-range-picker-input', value: _this2.isValidRange(value) && '' + _this2.format(value[1]) || '' }), showClear && _this2.isValidRange(value) && _react2.default.createElement('span', { onClick: _this2.handleClear, className: 'dh-calendar-picker-clear' }), _react2.default.createElement('span', { className: 'dh-calendar-picker-icon' }) ) ); } ); }; return RangeDateCalendar; }(_react.Component); RangeDateCalendar.defaultProps = { prefixCls: 'dh-calendar', placeholder: '请选择日期', locale: _zh_CN2.default, showToday: false, dateInputPlaceholder: ['开始', '结束'], rangePlaceholder: ['开始日期', '结束日期'], showClear: false, showDateInput: true, ranges: {} }; RangeDateCalendar.propTypes = { defaultValue: _propTypes2.default.array, value: _propTypes2.default.array, style: _propTypes2.default.object, showTime: _propTypes2.default.bool, showToday: _propTypes2.default.bool, disabled: _propTypes2.default.bool, onChange: _propTypes2.default.func, onClear: _propTypes2.default.func, dateInputPlaceholder: _propTypes2.default.array, rangePlaceholder: _propTypes2.default.array, showDateInput: _propTypes2.default.bool, ranges: _propTypes2.default.object, range: _propTypes2.default.string, defaultRange: _propTypes2.default.string, wrapperClassName: _propTypes2.default.string, className: _propTypes2.default.string, theme: _propTypes2.default.string }; exports.default = RangeDateCalendar;