dareway-rui
Version:
304 lines (264 loc) • 12.4 kB
JavaScript
;
var _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault');
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require('@babel/runtime/helpers/classCallCheck'));
var _createClass2 = _interopRequireDefault(require('@babel/runtime/helpers/createClass'));
var _possibleConstructorReturn2 = _interopRequireDefault(require('@babel/runtime/helpers/possibleConstructorReturn'));
var _getPrototypeOf2 = _interopRequireDefault(require('@babel/runtime/helpers/getPrototypeOf'));
var _assertThisInitialized2 = _interopRequireDefault(require('@babel/runtime/helpers/assertThisInitialized'));
var _inherits2 = _interopRequireDefault(require('@babel/runtime/helpers/inherits'));
var _defineProperty2 = _interopRequireDefault(require('@babel/runtime/helpers/defineProperty'));
var _react = _interopRequireDefault(require('react'));
var _reactDom = _interopRequireDefault(require('react-dom'));
var _propTypes = _interopRequireDefault(require('prop-types'));
var _reactLifecyclesCompat = require('react-lifecycles-compat');
var _createChainedFunction = _interopRequireDefault(require('rc-util/lib/createChainedFunction'));
var _KeyCode = _interopRequireDefault(require('rc-util/lib/KeyCode'));
var _placements = _interopRequireDefault(require('./picker/placements'));
var _placementsForGrid = _interopRequireDefault(require('./picker/placementsForGrid'));
var _rcTrigger = _interopRequireDefault(require('rc-trigger'));
function noop() {}
function refFn(field, component) {
this[field] = component;
}
var Picker =
/*#__PURE__*/
(function(_React$Component) {
(0, _inherits2.default)(Picker, _React$Component);
function Picker(_props) {
var _this;
(0, _classCallCheck2.default)(this, Picker);
_this = (0, _possibleConstructorReturn2.default)(
this,
(0, _getPrototypeOf2.default)(Picker).call(this, _props)
);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onCalendarKeyDown', function(
event
) {
if (event.keyCode === _KeyCode.default.ESC) {
event.stopPropagation();
_this.close(_this.focus);
}
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onCalendarSelect', function(
value
) {
var cause = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var props = _this.props;
if (!('value' in props)) {
_this.setState({
value: value
});
}
if (
cause.source === 'keyboard' ||
cause.source === 'dateInputSelect' ||
(!props.calendar.props.timePicker && cause.source !== 'dateInput') ||
cause.source === 'todayButton'
) {
_this.close(_this.focus);
}
props.onChange(value);
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onKeyDown', function(event) {
if (
!_this.state.open &&
(event.keyCode === _KeyCode.default.DOWN || event.keyCode === _KeyCode.default.ENTER)
) {
_this.open();
event.preventDefault();
}
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onCalendarOk', function() {
_this.close(_this.focus);
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onCalendarClear', function() {
_this.close(_this.focus);
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'onVisibleChange', function(
open
) {
_this.setOpen(open);
});
(0, _defineProperty2.default)(
(0, _assertThisInitialized2.default)(_this),
'getCalendarElement',
function() {
var props = _this.props;
var state = _this.state;
var calendarProps = props.calendar.props;
var value = state.value;
var defaultValue = value;
var extraProps = {
ref: _this.saveCalendarRef,
defaultValue: defaultValue || calendarProps.defaultValue,
selectedValue: value,
onKeyDown: _this.onCalendarKeyDown,
onOk: (0, _createChainedFunction.default)(calendarProps.onOk, _this.onCalendarOk),
onSelect: (0, _createChainedFunction.default)(calendarProps.onSelect, _this.onCalendarSelect),
onClear: (0, _createChainedFunction.default)(calendarProps.onClear, _this.onCalendarClear)
};
return _react.default.cloneElement(props.calendar, extraProps);
}
);
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'setOpen', function(
open,
callback
) {
var onOpenChange = _this.props.onOpenChange;
if (_this.state.open !== open) {
if (!('open' in _this.props)) {
_this.setState(
{
open: open
},
callback
);
}
onOpenChange(open);
}
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'open', function(callback) {
_this.setOpen(true, callback);
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'close', function(callback) {
_this.setOpen(false, callback);
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'focus', function() {
if (!_this.state.open) {
// ReactDOM.findDOMNode(this).focus();
}
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), 'focusCalendar', function() {
if (_this.state.open && !!_this.calendarInstance) {
_this.calendarInstance.focus();
}
});
var _open;
if ('open' in _props) {
_open = _props.open;
} else {
_open = _props.defaultOpen;
}
var _value = _props.value || _props.defaultValue;
_this.saveCalendarRef = refFn.bind((0, _assertThisInitialized2.default)(_this), 'calendarInstance');
_this.state = {
open: _open,
value: _value
};
return _this;
}
(0, _createClass2.default)(
Picker,
[
{
key: 'componentDidUpdate',
value: function componentDidUpdate(_, prevState) {
if (!prevState.open && this.state.open) {
// setTimeout is for making sure saveCalendarRef happen before focusCalendar
this.focusTimeout = setTimeout(this.focusCalendar, 0, this);
}
}
},
{
key: 'componentWillUnmount',
value: function componentWillUnmount() {
clearTimeout(this.focusTimeout);
}
},
{
key: 'render',
value: function render() {
var props = this.props;
var prefixCls = props.prefixCls,
placement = props.placement,
style = props.style,
getCalendarContainer = props.getCalendarContainer,
align = props.align,
animation = props.animation,
disabled = props.disabled,
dropdownClassName = props.dropdownClassName,
transitionName = props.transitionName,
children = props.children,
isForGrid = props.isForGrid;
var state = this.state;
return _react.default.createElement(
_rcTrigger.default,
{
popup: this.getCalendarElement(),
popupAlign: align,
builtinPlacements: isForGrid ? _placementsForGrid.default : _placements.default,
popupPlacement: placement,
action: disabled && !state.open ? [] : ['click'],
destroyPopupOnHide: true,
getPopupContainer: getCalendarContainer,
popupStyle: style,
popupAnimation: animation,
popupTransitionName: transitionName,
popupVisible: state.open,
onPopupVisibleChange: this.onVisibleChange,
prefixCls: prefixCls,
popupClassName: dropdownClassName
},
_react.default.cloneElement(children(state, props), {
onKeyDown: this.onKeyDown
})
);
}
}
],
[
{
key: 'getDerivedStateFromProps',
value: function getDerivedStateFromProps(nextProps) {
var newState = {};
var value = nextProps.value,
open = nextProps.open;
if ('value' in nextProps) {
newState.value = value;
}
if (open !== undefined) {
newState.open = open;
}
return newState;
}
}
]
);
return Picker;
})(_react.default.Component);
(0, _defineProperty2.default)(Picker, 'propTypes', {
animation: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]),
disabled: _propTypes.default.bool,
transitionName: _propTypes.default.string,
onChange: _propTypes.default.func,
onOpenChange: _propTypes.default.func,
children: _propTypes.default.func,
getCalendarContainer: _propTypes.default.func,
calendar: _propTypes.default.element,
style: _propTypes.default.object,
open: _propTypes.default.bool,
defaultOpen: _propTypes.default.bool,
prefixCls: _propTypes.default.string,
placement: _propTypes.default.any,
value: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.array]),
defaultValue: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.array]),
align: _propTypes.default.object
});
(0, _defineProperty2.default)(Picker, 'defaultProps', {
prefixCls: 'rc-calendar-picker',
style: {},
align: {},
placement: 'bottomLeft',
defaultOpen: false,
onChange: noop,
onOpenChange: noop,
isForGrid: false
});
(0, _reactLifecyclesCompat.polyfill)(Picker);
var _default = Picker;
exports.default = _default;
//@ sourceMappingURL=Picker.js.map