antd
Version:
An enterprise-class UI design language and React-based implementation
170 lines (144 loc) • 7.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
exports["default"] = createPicker;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _MonthCalendar = require('rc-calendar/lib/MonthCalendar');
var _MonthCalendar2 = _interopRequireDefault(_MonthCalendar);
var _Picker = require('rc-calendar/lib/Picker');
var _Picker2 = _interopRequireDefault(_Picker);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _omit = require('omit.js');
var _omit2 = _interopRequireDefault(_omit);
var _icon = require('../icon');
var _icon2 = _interopRequireDefault(_icon);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function createPicker(TheCalendar) {
// use class typescript error
var CalenderWrapper = _react2["default"].createClass({
displayName: 'CalenderWrapper',
getDefaultProps: function getDefaultProps() {
return {
prefixCls: 'ant-calendar',
allowClear: true,
showToday: true
};
},
getInitialState: function getInitialState() {
var props = this.props;
return {
value: props.value || props.defaultValue,
tempValue: undefined
};
},
componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
if (nextProps.value !== undefined) {
this.setState({
value: nextProps.value,
tempValue: nextProps.value
});
}
},
clearSelection: function clearSelection(e) {
e.preventDefault();
e.stopPropagation();
this.setState({ value: null });
this.handleChange(null);
},
handleChange: function handleChange(value) {
var props = this.props;
if (props.value === undefined) {
this.setState({ value: value });
}
props.onChange(value, value && value.format(props.format) || '');
},
handleTempChange: function handleTempChange(tempValue) {
this.setState({ tempValue: tempValue });
},
// Clear temp value and trigger onChange when hide DatePicker[showTime] panel
handleOpenChange: function handleOpenChange(open) {
var _this = this;
var _props = this.props,
showTime = _props.showTime,
onOpenChange = _props.onOpenChange,
onChange = _props.onChange,
format = _props.format;
if (!open) {
(function () {
// tricky code to avoid triggering onChange multiple times
// when click `Now` button
var tempValue = void 0;
_this.setState(function (prevState) {
tempValue = prevState.tempValue;
var nextState = { tempValue: undefined };
if (showTime && tempValue) {
nextState.value = tempValue;
onChange(tempValue, tempValue && tempValue.format(format) || '');
}
return nextState;
});
})();
}
if (onOpenChange) {
onOpenChange(open);
}
},
render: function render() {
var _classNames,
_this2 = this;
var props = (0, _omit2["default"])(this.props, ['onChange']);
var prefixCls = props.prefixCls;
var locale = props.locale;
var placeholder = 'placeholder' in props ? props.placeholder : locale.lang.placeholder;
var disabledTime = props.showTime ? props.disabledTime : null;
var calendarClassName = (0, _classnames2["default"])((_classNames = {}, (0, _defineProperty3["default"])(_classNames, prefixCls + '-time', props.showTime), (0, _defineProperty3["default"])(_classNames, prefixCls + '-month', _MonthCalendar2["default"] === TheCalendar), _classNames));
// 需要选择时间时,点击 ok 时才触发 onChange
var pickerChangeHandler = {};
var calendarHandler = {};
if (props.showTime) {
calendarHandler = {
// fix https://github.com/ant-design/ant-design/issues/1902
onSelect: function onSelect(value) {
_this2.handleTempChange(value);
}
};
} else {
pickerChangeHandler = {
onChange: this.handleChange
};
}
var calendar = _react2["default"].createElement(TheCalendar, (0, _extends3["default"])({}, calendarHandler, { disabledDate: props.disabledDate, disabledTime: disabledTime, locale: locale.lang, timePicker: props.timePicker, defaultValue: props.defaultPickerValue || (0, _moment2["default"])(), dateInputPlaceholder: placeholder, prefixCls: prefixCls, className: calendarClassName, onOk: props.onOk, format: props.format, showToday: props.showToday }));
var clearIcon = !props.disabled && props.allowClear && this.state.value ? _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;
return _react2["default"].createElement(
'span',
null,
_react2["default"].createElement('input', { disabled: props.disabled, readOnly: true, value: value && value.format(props.format) || '', placeholder: placeholder, className: props.pickerInputClass }),
clearIcon,
_react2["default"].createElement('span', { className: prefixCls + '-picker-icon' })
);
};
return _react2["default"].createElement(
'span',
{ className: props.pickerClass, style: props.style },
_react2["default"].createElement(
_Picker2["default"],
(0, _extends3["default"])({}, props, pickerChangeHandler, { onOpenChange: this.handleOpenChange, calendar: calendar, value: this.state.tempValue || this.state.value, prefixCls: prefixCls + '-picker-container', style: props.popupStyle }),
input
)
);
}
});
return CalenderWrapper;
}
module.exports = exports['default'];