UNPKG

antd

Version:

An enterprise-class UI design language and React-based implementation

165 lines (138 loc) 6.79 kB
'use strict'; 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 _objectAssign = require('object-assign'); var _objectAssign2 = _interopRequireDefault(_objectAssign); 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 }; }, getInitialState: function getInitialState() { var props = this.props; return { value: props.value || props.defaultValue, tempValue: undefined }; }, componentWillReceiveProps: function componentWillReceiveProps(nextProps) { if ('value' in nextProps) { this.setState({ value: 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 (!('value' in props)) { this.setState({ value: value }); } props.onChange(value, value && value.format(props.format) || ''); }, handleTempChange: function handleTempChange(tempValue) { if (!('value' in this.props)) { this.setState({ tempValue: tempValue }); } }, // Clear temp value when hide picker panel handleOpenChange: function handleOpenChange(open) { if (!open) { this.setState({ tempValue: undefined }); } if (this.props.onOpenChange) { this.props.onOpenChange(open); } }, render: function render() { var _classNames, _this = 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 = { onOk: this.handleChange, // fix https://github.com/ant-design/ant-design/issues/1902 onSelect: function onSelect(value, cause) { if (cause && cause.source === 'todayButton') { _this.handleChange(value); } else { _this.handleTempChange(value); } } }; } else { pickerChangeHandler = { onChange: this.handleChange }; } var calendar = _react2["default"].createElement(TheCalendar, (0, _extends3["default"])({ 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 }, calendarHandler)); // default width for showTime var pickerStyle = {}; if (props.showTime) { pickerStyle.width = 180; } 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; return _react2["default"].createElement( 'span', { className: props.pickerClass, style: (0, _objectAssign2["default"])({}, pickerStyle, 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 }), function (_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 CalenderWrapper; } module.exports = exports['default'];