UNPKG

react-dates

Version:

A responsive and accessible date range picker component built with React

384 lines (298 loc) 12.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); 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 _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _moment = require('moment'); var _moment2 = _interopRequireDefault(_moment); var _reactMomentProptypes = require('react-moment-proptypes'); var _reactMomentProptypes2 = _interopRequireDefault(_reactMomentProptypes); var _airbnbPropTypes = require('airbnb-prop-types'); var _OpenDirectionShape = require('../shapes/OpenDirectionShape'); var _OpenDirectionShape2 = _interopRequireDefault(_OpenDirectionShape); var _defaultPhrases = require('../defaultPhrases'); var _getPhrasePropTypes = require('../utils/getPhrasePropTypes'); var _getPhrasePropTypes2 = _interopRequireDefault(_getPhrasePropTypes); var _SingleDatePickerInput = require('./SingleDatePickerInput'); var _SingleDatePickerInput2 = _interopRequireDefault(_SingleDatePickerInput); var _IconPositionShape = require('../shapes/IconPositionShape'); var _IconPositionShape2 = _interopRequireDefault(_IconPositionShape); var _DisabledShape = require('../shapes/DisabledShape'); var _DisabledShape2 = _interopRequireDefault(_DisabledShape); var _toMomentObject = require('../utils/toMomentObject'); var _toMomentObject2 = _interopRequireDefault(_toMomentObject); var _toLocalizedDateString = require('../utils/toLocalizedDateString'); var _toLocalizedDateString2 = _interopRequireDefault(_toLocalizedDateString); var _isInclusivelyAfterDay = require('../utils/isInclusivelyAfterDay'); var _isInclusivelyAfterDay2 = _interopRequireDefault(_isInclusivelyAfterDay); var _baseClass = require('../utils/baseClass'); var _baseClass2 = _interopRequireDefault(_baseClass); var _constants = require('../constants'); 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 propTypes = (0, _airbnbPropTypes.forbidExtraProps)({ date: _reactMomentProptypes2['default'].momentObj, onDateChange: _propTypes2['default'].func.isRequired, focused: _propTypes2['default'].bool, onFocusChange: _propTypes2['default'].func.isRequired, id: _propTypes2['default'].string.isRequired, placeholder: _propTypes2['default'].string, // also used as label screenReaderMessage: _propTypes2['default'].string, showClearDate: _propTypes2['default'].bool, showCaret: _propTypes2['default'].bool, showDefaultInputIcon: _propTypes2['default'].bool, inputIconPosition: _IconPositionShape2['default'], disabled: _DisabledShape2['default'], required: _propTypes2['default'].bool, readOnly: _propTypes2['default'].bool, openDirection: _OpenDirectionShape2['default'], noBorder: _propTypes2['default'].bool, block: _propTypes2['default'].bool, small: _propTypes2['default'].bool, regular: _propTypes2['default'].bool, verticalSpacing: _airbnbPropTypes.nonNegativeInteger, keepOpenOnDateSelect: _propTypes2['default'].bool, reopenPickerOnClearDate: _propTypes2['default'].bool, isOutsideRange: _propTypes2['default'].func, displayFormat: _propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].func]), onClose: _propTypes2['default'].func, onKeyDownArrowDown: _propTypes2['default'].func, onKeyDownQuestionMark: _propTypes2['default'].func, customInputIcon: _propTypes2['default'].node, customCloseIcon: _propTypes2['default'].node, // accessibility isFocused: _propTypes2['default'].bool, // i18n phrases: _propTypes2['default'].shape((0, _getPhrasePropTypes2['default'])(_defaultPhrases.SingleDatePickerInputPhrases)), isRTL: _propTypes2['default'].bool }); var defaultProps = { date: null, focused: false, placeholder: '', screenReaderMessage: 'Date', showClearDate: false, showCaret: false, showDefaultInputIcon: false, inputIconPosition: _constants.ICON_BEFORE_POSITION, disabled: false, required: false, readOnly: false, openDirection: _constants.OPEN_DOWN, noBorder: false, block: false, small: false, regular: false, verticalSpacing: undefined, keepOpenOnDateSelect: false, reopenPickerOnClearDate: false, isOutsideRange: function () { function isOutsideRange(day) { return !(0, _isInclusivelyAfterDay2['default'])(day, (0, _moment2['default'])()); } return isOutsideRange; }(), displayFormat: function () { function displayFormat() { return _moment2['default'].localeData().longDateFormat('L'); } return displayFormat; }(), onClose: function () { function onClose() {} return onClose; }(), onKeyDownArrowDown: function () { function onKeyDownArrowDown() {} return onKeyDownArrowDown; }(), onKeyDownQuestionMark: function () { function onKeyDownQuestionMark() {} return onKeyDownQuestionMark; }(), customInputIcon: null, customCloseIcon: null, // accessibility isFocused: false, // i18n phrases: _defaultPhrases.SingleDatePickerInputPhrases, isRTL: false }; /** @extends React.Component */ var SingleDatePickerInputController = function (_BaseClass) { _inherits(SingleDatePickerInputController, _BaseClass); function SingleDatePickerInputController(props) { _classCallCheck(this, SingleDatePickerInputController); var _this = _possibleConstructorReturn(this, (SingleDatePickerInputController.__proto__ || Object.getPrototypeOf(SingleDatePickerInputController)).call(this, props)); _this.onChange = _this.onChange.bind(_this); _this.onFocus = _this.onFocus.bind(_this); _this.onClearFocus = _this.onClearFocus.bind(_this); _this.clearDate = _this.clearDate.bind(_this); return _this; } _createClass(SingleDatePickerInputController, [{ key: 'onChange', value: function () { function onChange(dateString) { var _props = this.props, isOutsideRange = _props.isOutsideRange, keepOpenOnDateSelect = _props.keepOpenOnDateSelect, onDateChange = _props.onDateChange, onFocusChange = _props.onFocusChange, onClose = _props.onClose; var newDate = (0, _toMomentObject2['default'])(dateString, this.getDisplayFormat()); var isValid = newDate && !isOutsideRange(newDate); if (isValid) { onDateChange(newDate); if (!keepOpenOnDateSelect) { onFocusChange({ focused: false }); onClose({ date: newDate }); } } else { onDateChange(null); } } return onChange; }() }, { key: 'onFocus', value: function () { function onFocus() { var _props2 = this.props, onFocusChange = _props2.onFocusChange, disabled = _props2.disabled; if (!disabled) { onFocusChange({ focused: true }); } } return onFocus; }() }, { key: 'onClearFocus', value: function () { function onClearFocus() { var _props3 = this.props, focused = _props3.focused, onFocusChange = _props3.onFocusChange, onClose = _props3.onClose, date = _props3.date; if (!focused) return; onFocusChange({ focused: false }); onClose({ date: date }); } return onClearFocus; }() }, { key: 'getDisplayFormat', value: function () { function getDisplayFormat() { var displayFormat = this.props.displayFormat; return typeof displayFormat === 'string' ? displayFormat : displayFormat(); } return getDisplayFormat; }() }, { key: 'getDateString', value: function () { function getDateString(date) { var displayFormat = this.getDisplayFormat(); if (date && displayFormat) { return date && date.format(displayFormat); } return (0, _toLocalizedDateString2['default'])(date); } return getDateString; }() }, { key: 'clearDate', value: function () { function clearDate() { var _props4 = this.props, onDateChange = _props4.onDateChange, reopenPickerOnClearDate = _props4.reopenPickerOnClearDate, onFocusChange = _props4.onFocusChange; onDateChange(null); if (reopenPickerOnClearDate) { onFocusChange({ focused: true }); } } return clearDate; }() }, { key: 'render', value: function () { function render() { var _props5 = this.props, id = _props5.id, placeholder = _props5.placeholder, disabled = _props5.disabled, focused = _props5.focused, isFocused = _props5.isFocused, required = _props5.required, readOnly = _props5.readOnly, openDirection = _props5.openDirection, showClearDate = _props5.showClearDate, showCaret = _props5.showCaret, showDefaultInputIcon = _props5.showDefaultInputIcon, inputIconPosition = _props5.inputIconPosition, customCloseIcon = _props5.customCloseIcon, customInputIcon = _props5.customInputIcon, date = _props5.date, phrases = _props5.phrases, onKeyDownArrowDown = _props5.onKeyDownArrowDown, onKeyDownQuestionMark = _props5.onKeyDownQuestionMark, screenReaderMessage = _props5.screenReaderMessage, isRTL = _props5.isRTL, noBorder = _props5.noBorder, block = _props5.block, small = _props5.small, regular = _props5.regular, verticalSpacing = _props5.verticalSpacing; var displayValue = this.getDateString(date); return _react2['default'].createElement(_SingleDatePickerInput2['default'], { id: id, placeholder: placeholder, focused: focused, isFocused: isFocused, disabled: disabled, required: required, readOnly: readOnly, openDirection: openDirection, showCaret: showCaret, onClearDate: this.clearDate, showClearDate: showClearDate, showDefaultInputIcon: showDefaultInputIcon, inputIconPosition: inputIconPosition, customCloseIcon: customCloseIcon, customInputIcon: customInputIcon, displayValue: displayValue, onChange: this.onChange, onFocus: this.onFocus, onKeyDownShiftTab: this.onClearFocus, onKeyDownTab: this.onClearFocus, onKeyDownArrowDown: onKeyDownArrowDown, onKeyDownQuestionMark: onKeyDownQuestionMark, screenReaderMessage: screenReaderMessage, phrases: phrases, isRTL: isRTL, noBorder: noBorder, block: block, small: small, regular: regular, verticalSpacing: verticalSpacing }); } return render; }() }]); return SingleDatePickerInputController; }(_baseClass2['default']); exports['default'] = SingleDatePickerInputController; SingleDatePickerInputController.propTypes = propTypes; SingleDatePickerInputController.defaultProps = defaultProps;