react-date-picker
Version:
A carefully crafted date picker for React
239 lines (181 loc) • 7.71 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; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactClass = require('react-class');
var _reactClass2 = _interopRequireDefault(_reactClass);
var _lodash = require('lodash.throttle');
var _lodash2 = _interopRequireDefault(_lodash);
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
var _reactFlex = require('react-flex');
var _join = require('./join');
var _join2 = _interopRequireDefault(_join);
var _toMoment = require('./toMoment');
var _toMoment2 = _interopRequireDefault(_toMoment);
var _Clock = require('./Clock');
var _Clock2 = _interopRequireDefault(_Clock);
var _DateFormatSpinnerInput = require('./DateFormatSpinnerInput');
var _DateFormatSpinnerInput2 = _interopRequireDefault(_DateFormatSpinnerInput);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: 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) : subClass.__proto__ = superClass; }
var ClockInput = function (_Component) {
_inherits(ClockInput, _Component);
function ClockInput(props) {
_classCallCheck(this, ClockInput);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ClockInput).call(this, props));
var delay = props.changeDelay;
_this.throttleSetValue = delay == -1 ? _this.setValue : (0, _lodash2.default)(_this.setValue, delay);
_this.state = {
value: props.defaultValue || Date.now()
};
return _this;
}
_createClass(ClockInput, [{
key: 'getValue',
value: function getValue() {
return this.value;
}
}, {
key: 'render',
value: function render() {
var props = this.props;
var format = props.dateFormat || props.format;
var dateFormat = format.substring(format.toLowerCase().indexOf('hh'));
this.dateFormat = dateFormat;
this.value = props.value !== undefined ? props.value : this.state.value;
var className = (0, _join2.default)(props.className, 'react-date-picker__clock-input', props.theme && 'react-date-picker__clock-input--theme-' + props.theme);
var flexProps = (0, _objectAssign2.default)({}, this.props);
delete flexProps.changeDelay;
delete flexProps.cleanup;
delete flexProps.dateFormat;
delete flexProps.isClockInput;
delete flexProps.onEnterKey;
delete flexProps.onEscapeKey;
delete flexProps.onTimeChange;
delete flexProps.updateOnWheel;
delete flexProps.theme;
delete flexProps.viewIndex;
delete flexProps.wrapTime;
if (typeof this.props.cleanup == 'function') {
this.props.cleanup(flexProps);
}
return _react2.default.createElement(
_reactFlex.Flex,
_extends({
column: true
}, flexProps, {
value: null,
defaultValue: null,
className: className
}),
this.renderClock(),
this.renderTimeInput()
);
}
}, {
key: 'renderTimeInput',
value: function renderTimeInput() {
var _this2 = this;
var props = this.props;
var dateInput = _react2.default.Children.toArray(props.children).filter(function (child) {
return child && child.props && child.props.isDateInput;
})[0];
var dateInputProps = (0, _objectAssign2.default)({}, this.props, {
ref: function ref(field) {
_this2.field = field;
},
tabIndex: props.readOnly ? -1 : props.tabIndex || 0,
readOnly: props.readOnly,
value: this.value,
dateFormat: this.dateFormat,
onChange: this.onChange,
onKeyDown: this.onKeyDown,
size: props.size || this.dateFormat.length + 2
});
if (dateInput) {
return _react2.default.cloneElement(dateInput, dateInputProps);
}
return _react2.default.createElement(_DateFormatSpinnerInput2.default, _extends({}, dateInputProps, { style: null }));
}
}, {
key: 'focus',
value: function focus() {
if (this.field) {
this.field.focus();
}
}
}, {
key: 'onKeyDown',
value: function onKeyDown(event) {
if (this.props.onEnterKey && event.key == 'Enter') {
this.props.onEnterKey(event);
}
if (this.props.onEscapeKey && event.key == 'Escape') {
this.props.onEscapeKey(event);
}
}
}, {
key: 'onChange',
value: function onChange(value) {
if (this.props.value === undefined) {
this.setState({
value: value
});
}
if (this.props.onChange) {
this.throttleSetValue(value);
}
}
}, {
key: 'setValue',
value: function setValue(value) {
if (this.props.value === undefined) {
this.setState({
value: value
});
}
if (this.props.onChange) {
this.props.onChange(value, this.dateFormat);
}
}
}, {
key: 'renderClock',
value: function renderClock() {
var props = this.props;
var clock = _react2.default.Children.toArray(props.children).filter(function (child) {
return child && child.props && child.props.isDatePickerClock;
})[0];
var dateFormat = this.dateFormat;
var time = (0, _toMoment2.default)(this.value, { dateFormat: dateFormat });
var clockProps = {
time: time,
theme: props.theme,
showMinutesHand: dateFormat.indexOf('mm') != -1,
showSecondsHand: dateFormat.indexOf('ss') != -1
};
if (clock) {
return _react2.default.cloneElement(clock, clockProps);
}
return _react2.default.createElement(_Clock2.default, clockProps);
}
}]);
return ClockInput;
}(_reactClass2.default);
exports.default = ClockInput;
ClockInput.defaultProps = {
changeDelay: 50,
dateFormat: 'YYYY-MM-DD',
updateOnWheel: true,
theme: 'default',
wrapTime: false,
isClockInput: true,
onTimeChange: function onTimeChange() {}
};
ClockInput.propTypes = {};