antd
Version:
An enterprise-class UI design language and React-based implementation
210 lines (172 loc) • 8.34 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = undefined;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _RangeCalendar = require('rc-calendar/lib/RangeCalendar');
var _RangeCalendar2 = _interopRequireDefault(_RangeCalendar);
var _Picker = require('rc-calendar/lib/Picker');
var _Picker2 = _interopRequireDefault(_Picker);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _icon = require('../icon');
var _icon2 = _interopRequireDefault(_icon);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var RangePicker = function (_React$Component) {
(0, _inherits3["default"])(RangePicker, _React$Component);
function RangePicker(props) {
(0, _classCallCheck3["default"])(this, RangePicker);
var _this = (0, _possibleConstructorReturn3["default"])(this, _React$Component.call(this, props));
_this.clearSelection = function (e) {
e.preventDefault();
e.stopPropagation();
_this.setState({ value: [] });
_this.handleChange([]);
};
_this.handleChange = function (value) {
var props = _this.props;
if (!('value' in props)) {
_this.setState({ value: value });
}
props.onChange(value, [value[0] && value[0].format(props.format) || '', value[1] && value[1].format(props.format) || '']);
};
_this.handleOpenChange = function (open) {
_this.setState({ open: open });
var onOpenChange = _this.props.onOpenChange;
if (onOpenChange) {
onOpenChange(open);
}
};
_this.renderFooter = function () {
var _this$props = _this.props,
prefixCls = _this$props.prefixCls,
ranges = _this$props.ranges;
if (!ranges) {
return null;
}
var operations = Object.keys(ranges).map(function (range) {
var value = ranges[range];
return _react2["default"].createElement(
'a',
{ key: range, onClick: function onClick() {
return _this.setValue(value);
} },
range
);
});
return _react2["default"].createElement(
'div',
{ className: prefixCls + '-range-quick-selector' },
operations
);
};
_this.state = {
value: props.value || props.defaultValue || [],
open: props.open
};
return _this;
}
RangePicker.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
if ('value' in nextProps) {
this.setState({
value: nextProps.value || []
});
}
if ('open' in nextProps) {
this.setState({
open: nextProps.open
});
}
};
RangePicker.prototype.setValue = function setValue(value) {
this.handleChange(value);
if (!this.props.showTime) {
this.setState({ open: false });
}
};
RangePicker.prototype.render = function render() {
var _classNames,
_this2 = this;
var props = this.props;
var disabledDate = props.disabledDate,
disabledTime = props.disabledTime,
showTime = props.showTime,
showToday = props.showToday,
ranges = props.ranges,
prefixCls = props.prefixCls,
popupStyle = props.popupStyle,
style = props.style,
onOk = props.onOk,
locale = props.locale,
format = props.format;
var state = this.state;
var calendarClassName = (0, _classnames2["default"])((_classNames = {}, (0, _defineProperty3["default"])(_classNames, prefixCls + '-time', showTime), (0, _defineProperty3["default"])(_classNames, prefixCls + '-range-with-ranges', ranges), _classNames));
// 需要选择时间时,点击 ok 时才触发 onChange
var pickerChangeHandler = {
onChange: this.handleChange
};
var calendarHandler = {
onOk: this.handleChange
};
if (props.timePicker) {
pickerChangeHandler.onChange = function (value) {
return _this2.handleChange(value);
};
} else {
calendarHandler = {};
}
var startPlaceholder = 'placeholder' in props ? props.placeholder[0] : locale.lang.rangePlaceholder[0];
var endPlaceholder = 'placeholder' in props ? props.placeholder[1] : locale.lang.rangePlaceholder[1];
var calendar = _react2["default"].createElement(_RangeCalendar2["default"], (0, _extends3["default"])({}, calendarHandler, { format: format, prefixCls: prefixCls, className: calendarClassName, renderFooter: this.renderFooter, timePicker: props.timePicker, disabledDate: disabledDate, disabledTime: disabledTime, dateInputPlaceholder: [startPlaceholder, endPlaceholder], locale: locale.lang, onOk: onOk, defaultValue: props.defaultPickerValue || [(0, _moment2["default"])(), (0, _moment2["default"])()], showToday: showToday }));
var clearIcon = !props.disabled && props.allowClear && state.value && (state.value[0] || state.value[1]) ? _react2["default"].createElement(_icon2["default"], { type: 'cross-circle', className: prefixCls + '-picker-clear', onClick: this.clearSelection }) : null;
var input = function input(_ref) {
var value = _ref.value;
var start = value[0];
var end = value[1];
return _react2["default"].createElement(
'span',
{ className: props.pickerInputClass, disabled: props.disabled },
_react2["default"].createElement('input', { disabled: props.disabled, readOnly: true, value: start && start.format(props.format) || '', placeholder: startPlaceholder, className: prefixCls + '-range-picker-input' }),
_react2["default"].createElement(
'span',
{ className: prefixCls + '-range-picker-separator' },
' ~ '
),
_react2["default"].createElement('input', { disabled: props.disabled, readOnly: true, value: end && end.format(props.format) || '', placeholder: endPlaceholder, className: prefixCls + '-range-picker-input' }),
clearIcon,
_react2["default"].createElement('span', { className: prefixCls + '-picker-icon' })
);
};
return _react2["default"].createElement(
'span',
{ className: props.pickerClass, style: style },
_react2["default"].createElement(
_Picker2["default"],
(0, _extends3["default"])({}, props, pickerChangeHandler, { calendar: calendar, value: state.value, open: state.open, onOpenChange: this.handleOpenChange, prefixCls: prefixCls + '-picker-container', style: popupStyle }),
input
)
);
};
return RangePicker;
}(_react2["default"].Component);
exports["default"] = RangePicker;
RangePicker.defaultProps = {
prefixCls: 'ant-calendar',
allowClear: true,
showToday: false
};
module.exports = exports['default'];