antd
Version:
An enterprise-class UI design language and React-based implementation
194 lines (154 loc) • 7.34 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: 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; };
exports["default"] = createPicker;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _MonthCalendar = require('rc-calendar/lib/MonthCalendar');
var _MonthCalendar2 = _interopRequireDefault(_MonthCalendar);
var _Picker = require('rc-calendar/lib/Picker');
var _Picker2 = _interopRequireDefault(_Picker);
var _gregorianCalendar = require('gregorian-calendar');
var _gregorianCalendar2 = _interopRequireDefault(_gregorianCalendar);
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 }; }
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
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) : _defaults(subClass, superClass); }
function createPicker(TheCalendar) {
var _class, _temp, _initialiseProps;
return _temp = _class = function (_React$Component) {
_inherits(CalenderWrapper, _React$Component);
function CalenderWrapper(props) {
_classCallCheck(this, CalenderWrapper);
var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));
_initialiseProps.call(_this);
_this.state = {
value: _this.props.parseDateFromValue(_this.props.value || _this.props.defaultValue)
};
return _this;
}
CalenderWrapper.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
if ('value' in nextProps) {
this.setState({
value: nextProps.parseDateFromValue(nextProps.value)
});
}
};
CalenderWrapper.prototype.render = function render() {
var _this2 = this;
var props = this.props;
var locale = props.locale;
// 以下两行代码
// 给没有初始值的日期选择框提供本地化信息
// 否则会以周日开始排
var defaultCalendarValue = new _gregorianCalendar2["default"](locale);
defaultCalendarValue.setTime(Date.now());
var placeholder = 'placeholder' in props ? props.placeholder : locale.lang.placeholder;
var disabledTime = props.showTime ? props.disabledTime : null;
var calendarClassName = (0, _classnames2["default"])({
'ant-calendar-time': props.showTime,
'ant-calendar-month': _MonthCalendar2["default"] === TheCalendar
});
// 需要选择时间时,点击 ok 时才触发 onChange
var pickerChangeHandler = {
onChange: this.handleChange
};
var calendarHandler = {
onOk: this.handleChange,
// fix https://github.com/ant-design/ant-design/issues/1902
onSelect: function onSelect(value, cause) {
if (cause && cause.source === 'todayButton') {
_this2.handleChange(value);
}
}
};
if (props.showTime) {
pickerChangeHandler = {};
} else {
calendarHandler = {};
}
var calendar = _react2["default"].createElement(TheCalendar, _extends({
formatter: props.getFormatter(),
disabledDate: props.disabledDate,
disabledTime: disabledTime,
locale: locale.lang,
timePicker: props.timePicker,
defaultValue: defaultCalendarValue,
dateInputPlaceholder: placeholder,
prefixCls: 'ant-calendar',
className: calendarClassName,
onOk: props.onOk
}, calendarHandler));
// default width for showTime
var pickerStyle = {};
if (props.showTime) {
pickerStyle.width = 180;
}
var clearIcon = !props.disabled && this.state.value ? _react2["default"].createElement(_icon2["default"], { type: 'cross-circle',
className: 'ant-calendar-picker-clear',
onClick: this.clearSelection
}) : null;
return _react2["default"].createElement(
'span',
{ className: props.pickerClass, style: _extends({}, pickerStyle, props.style) },
_react2["default"].createElement(
_Picker2["default"],
_extends({
transitionName: props.transitionName,
disabled: props.disabled,
calendar: calendar,
value: this.state.value,
prefixCls: 'ant-calendar-picker-container',
style: props.popupStyle,
align: props.align,
getCalendarContainer: props.getCalendarContainer,
open: props.open,
onOpen: props.toggleOpen,
onClose: props.toggleOpen
}, pickerChangeHandler),
function (_ref) {
var value = _ref.value;
return _react2["default"].createElement(
'span',
null,
_react2["default"].createElement('input', {
disabled: props.disabled,
readOnly: true,
value: value ? props.getFormatter().format(value) : '',
placeholder: placeholder,
className: props.pickerInputClass
}),
clearIcon,
_react2["default"].createElement('span', { className: 'ant-calendar-picker-icon' })
);
}
)
);
};
return CalenderWrapper;
}(_react2["default"].Component), _initialiseProps = function _initialiseProps() {
var _this3 = this;
this.clearSelection = function (e) {
e.preventDefault();
e.stopPropagation();
_this3.setState({ value: null });
_this3.handleChange(null);
};
this.handleChange = function (value) {
var props = _this3.props;
if (!('value' in props)) {
_this3.setState({ value: value });
}
var timeValue = value ? new Date(value.getTime()) : null;
props.onChange(timeValue, value ? props.getFormatter().format(value) : '');
};
}, _temp;
}
module.exports = exports['default'];
;