material-ui-datetime-range-picker
Version:
React Datetime Range Picker Component that Implements Google's Material Design Via Material-UI.
863 lines (814 loc) • 87.5 kB
JavaScript
'use strict';
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 _simpleAssign = require('simple-assign');
var _simpleAssign2 = _interopRequireDefault(_simpleAssign);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _getMuiTheme = require('material-ui/styles/getMuiTheme');
var _getMuiTheme2 = _interopRequireDefault(_getMuiTheme);
var _dateUtils = require('./dateUtils');
var _DateRangePickerDialog = require('./DateRangePickerDialog');
var _DateRangePickerDialog2 = _interopRequireDefault(_DateRangePickerDialog);
var _SvgIcon = require('@material-ui/core/SvgIcon');
var _SvgIcon2 = _interopRequireDefault(_SvgIcon);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
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 DateRangePicker = function (_Component) {
_inherits(DateRangePicker, _Component);
function DateRangePicker() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, DateRangePicker);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = DateRangePicker.__proto__ || Object.getPrototypeOf(DateRangePicker)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
dialogVisible: false,
startDate: undefined,
endDate: undefined,
selectedStartDate: undefined,
selectedEndDate: undefined
}, _this.handleAccept = function (dates, keepOpen) {
if (!_this.isControlled()) {
_this.setState({
startDate: dates.start,
endDate: dates.end,
dialogVisible: keepOpen || false,
selectedStartDate: dates.start,
selectedEndDate: dates.end
});
if (_this.props.onChange) {
_this.props.onChange(null, dates);
}
} else {
_this.setState({
dialogVisible: keepOpen || false
});
if (_this.props.onChange) {
_this.props.onChange(null, dates);
}
}
}, _this.handleUpdate = function (dates) {
_this.setState({
selectedStartDate: dates.start,
selectedEndDate: dates.end
});
}, _this.handleShow = function () {
_this.setState({
dialogVisible: true
});
if (_this.props.onShow) _this.props.onShow();
}, _this.handleDismiss = function (dates) {
_this.setState({
selectedStartDate: undefined,
selectedEndDate: undefined,
dialogVisible: false
});
if (_this.props.onDismiss) _this.props.onDismiss(null, dates);
}, _this.handleFocus = function (event) {
event.target.blur();
if (_this.props.onFocus) {
_this.props.onFocus(event);
}
}, _this.handleTouchTap = function (showRef, startEnd, dateTime, disabled, event) {
if (!disabled) {
if (_this.props.onClick) {
_this.props.onClick(event);
}
if (!_this.props.disabled) {
setTimeout(function () {
_this.openDialog(showRef, startEnd, dateTime);
}, 0);
}
}
}, _this.formatDate = function (date) {
if (_this.props.locale) {
var DateTimeFormat = _this.props.DateTimeFormat || _dateUtils.dateTimeFormat;
return new DateTimeFormat(_this.props.locale, {
day: 'numeric',
month: 'numeric',
year: 'numeric'
}).format(date);
} else {
return (0, _dateUtils.formatIso)(date);
}
}, _this.dropdownArrow = function (disabled) {
var layout = _this.props.layout;
var style = {
fill: disabled ? '#a2a2a2' : '#757575',
width: '10px', height: '6px',
marginRight: '10px'
};
return layout !== 'single' && _react2.default.createElement(
_SvgIcon2.default,
{ viewBox: '3064 -23442 10 6', style: style },
_react2.default.createElement('path', {
d: 'M23.07,10a.707.707,0,0,1-.479-.19.684.684,0,0,1,0-.949L26.485,5,22.591,1.139a.684.684,0,0,1,0-.949.7.7,0,0,1,.957,0L28.4,5,23.549,9.81A.652.652,0,0,1,23.07,10Z' // eslint-disable-line max-len
, transform: 'translate(3074 -23464.4) rotate(90)'
})
);
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(DateRangePicker, [{
key: 'getChildContext',
value: function getChildContext() {
return {
muiTheme: this.getTheme()
};
}
}, {
key: 'getTheme',
value: function getTheme() {
return this.context.muiTheme || (0, _getMuiTheme2.default)();
}
}, {
key: 'UNSAFE_componentWillMount',
value: function UNSAFE_componentWillMount() {
var newDates = this.getControlledDate();
if (this.isControlled() && newDates) {
this.setState({
startDate: newDates.start,
endDate: newDates.end
});
} else {
this.setState({
startDate: undefined,
endDate: undefined
});
}
}
}, {
key: 'UNSAFE_componentWillReceiveProps',
value: function UNSAFE_componentWillReceiveProps(nextProps) {
if (this.isControlled()) {
var newDates = this.getControlledDate(nextProps);
if (newDates) {
if (newDates.start && newDates.end && !(0, _dateUtils.isEqualDateTime)(this.state.startDate, newDates.start) || !(0, _dateUtils.isEqualDateTime)(this.state.endDate, newDates.end) || !(0, _dateUtils.isEqualDateTime)(this.state.selectedStartDate, newDates.start) || !(0, _dateUtils.isEqualDateTime)(this.state.selectedEndDate, newDates.end)) {
this.setState({
startDate: newDates.start,
endDate: newDates.end,
selectedStartDate: newDates.start,
selectedEndDate: newDates.end
});
}
} else if (this.props.value && this.props.value.start && this.props.value.end && nextProps.value && !nextProps.value.start && !nextProps.value.end) {
this.setState({
dialogStartDate: new Date(),
dialogEndDate: new Date(),
dialogVisible: false,
startDate: undefined,
endDate: undefined,
selectedStartDate: undefined,
selectedEndDate: undefined
}, this.refs.dialogWindow.reset.bind(this));
}
}
}
}, {
key: 'getDates',
value: function getDates() {
return {
startDate: this.state.startDate,
endDate: this.state.endDate
};
}
/**
* Open the date-picker dialog programmatically from a parent.
*/
}, {
key: 'openDialog',
value: function openDialog(showRef, startEnd, dateTime) {
/**
* if the date is not selected then set it to new date
* (get the current system date while doing so)
* else set it to the currently selected date
*/
var allRefs = {
startDate: this.refs.startdatefield,
startTime: this.refs.starttimefield,
endDate: this.refs.enddatefield,
endTime: this.refs.endtimefield
};
if (!this.state.dialogVisible) {
if (this.state.startDate !== undefined && this.state.endDate !== undefined) {
this.setState({
dialogStartDate: this.getDates().startDate,
dialogEndDate: this.getDates().endDate,
selectedStartDate: undefined,
selectedEndDate: undefined
}, this.refs.dialogWindow.show.bind(this, showRef, startEnd, dateTime, allRefs));
} else {
this.setState({
dialogStartDate: new Date(),
dialogEndDate: new Date(),
selectedStartDate: undefined,
selectedEndDate: undefined
}, this.refs.dialogWindow.show.bind(this, showRef, startEnd, dateTime, allRefs));
}
}
}
/**
* Alias for `openDialog()` for an api consistent with TextField.
*/
// focus() {
// this.openDialog();
// }
}, {
key: 'isControlled',
value: function isControlled() {
return this.props.hasOwnProperty('value');
}
}, {
key: 'getControlledDate',
value: function getControlledDate() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
if (props.value && (props.value.start instanceof Date || props.value.end instanceof Date)) {
return props.value;
}
}
}, {
key: 'formatDateForDisplay',
value: function formatDateForDisplay(date, label) {
if (date instanceof Date) {
if (this.props.locale) {
return new Intl.DateTimeFormat(this.props.locale, {
day: '2-digit',
month: '2-digit',
year: '2-digit'
}).format(date);
} else {
return new Intl.DateTimeFormat('en-US', {
day: '2-digit',
month: '2-digit',
year: '2-digit'
}).format(date);
}
} else {
return label;
}
}
}, {
key: 'formatTimeForDisplay',
value: function formatTimeForDisplay(date, label) {
if (date instanceof Date) {
if (this.props.locale) {
return new Intl.DateTimeFormat(this.props.locale, {
hour: '2-digit',
minute: '2-digit',
hour12: true
}).format(date);
} else {
return new Intl.DateTimeFormat('en-US', {
hour: '2-digit',
minute: '2-digit',
hour12: true
}).format(date);
}
} else {
return label;
}
}
}, {
key: 'divider',
value: function divider() {
var layout = this.props.layout;
return layout === 'single' && _react2.default.createElement(
'span',
{ style: { margin: 'auto 10px', color: '#757575' } },
'-'
);
}
}, {
key: 'timeStyle',
value: function timeStyle(disabled) {
var layout = this.props.layout;
return _extends({
height: '38px',
lineHeight: '38px',
paddingLeft: layout !== 'single' ? '10px' : '5px',
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
cursor: disabled ? 'not-allowed' : 'pointer',
color: '#757575'
}, layout !== 'single' ? {
width: '99px',
border: '1px solid #e5e5e5'
} : {});
}
}, {
key: 'dateStyle',
value: function dateStyle(disabled) {
var layout = this.props.layout;
return _extends({
height: '38px',
lineHeight: '38px',
paddingLeft: layout === 'single' ? '0px' : '10px',
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
cursor: disabled ? 'not-allowed' : 'pointer',
color: '#757575'
}, layout !== 'single' ? {
width: '117px',
border: '1px solid #e5e5e5'
} : {});
}
}, {
key: 'getStyles',
value: function getStyles() {
var layout = this.props.layout;
return {
textField: {
display: 'flex',
justifyContent: layout !== 'single' ? 'space-between' : 'flex-start',
alignItems: 'center',
flexWrap: layout === 'single' ? 'nowrap' : 'wrap'
},
endContainer: _extends({
display: 'flex',
justifyContent: 'space-between'
}, layout !== 'single' ? {
width: '100%'
} : {}),
startContainer: _extends({
display: 'flex',
justifyContent: 'space-between'
}, layout !== 'single' ? {
width: '100%',
marginBottom: '16px'
} : {})
};
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
DateTimeFormat = _props.DateTimeFormat,
autoOk = _props.autoOk,
autoOpenField = _props.autoOpenField,
blockedDateTimeRanges = _props.blockedDateTimeRanges,
calendarDateWidth = _props.calendarDateWidth,
calendarTimeWidth = _props.calendarTimeWidth,
cancelLabel = _props.cancelLabel,
className = _props.className,
container = _props.container,
dayButtonSize = _props.dayButtonSize,
display = _props.display,
end = _props.end,
endLabel = _props.endLabel,
endLabelDate = _props.endLabelDate,
endLabelTime = _props.endLabelTime,
firstDayOfWeek = _props.firstDayOfWeek,
formatDisplay = _props.formatDisplay,
layout = _props.layout,
locale = _props.locale,
mode = _props.mode,
okLabel = _props.okLabel,
onDismiss = _props.onDismiss,
onFocus = _props.onFocus,
onShow = _props.onShow,
onClick = _props.onClick,
showCalendarDate = _props.showCalendarDate,
showCalendarStatus = _props.showCalendarStatus,
start = _props.start,
startLabel = _props.startLabel,
startLabelDate = _props.startLabelDate,
startLabelTime = _props.startLabelTime,
style = _props.style,
textFieldStyle = _props.textFieldStyle,
utils = _props.utils,
other = _objectWithoutProperties(_props, ['DateTimeFormat', 'autoOk', 'autoOpenField', 'blockedDateTimeRanges', 'calendarDateWidth', 'calendarTimeWidth', 'cancelLabel', 'className', 'container', 'dayButtonSize', 'display', 'end', 'endLabel', 'endLabelDate', 'endLabelTime', 'firstDayOfWeek', 'formatDisplay', 'layout', 'locale', 'mode', 'okLabel', 'onDismiss', 'onFocus', 'onShow', 'onClick', 'showCalendarDate', 'showCalendarStatus', 'start', 'startLabel', 'startLabelDate', 'startLabelTime', 'style', 'textFieldStyle', 'utils']);
var _getTheme = this.getTheme(),
prepareStyles = _getTheme.prepareStyles;
var styles = this.getStyles();
var _state = this.state,
selectedStartDate = _state.selectedStartDate,
selectedEndDate = _state.selectedEndDate,
startDate = _state.startDate,
endDate = _state.endDate;
var starting = selectedStartDate ? selectedStartDate : startDate;
var ending = selectedEndDate ? selectedEndDate : endDate;
var formattedStartDate = this.formatDateForDisplay(starting, startLabelDate);
var formattedStartTime = this.formatTimeForDisplay(starting, startLabelTime);
var formattedEndDate = this.formatDateForDisplay(ending, endLabelDate);
var formattedEndTime = this.formatTimeForDisplay(ending, endLabelTime);
var startInfo = {
dateRef: 'startdatefield',
onClickDate: this.handleTouchTap.bind(this, this.refs.startdatefield, 'start', 'date', false),
formattedDate: formattedStartDate,
timeRef: 'starttimefield',
onClickTime: this.handleTouchTap.bind(this, this.refs.starttimefield, 'start', 'time', formattedStartDate === startLabelDate),
formattedTime: formattedStartTime
};
var endInfo = {
dateRef: 'enddatefield',
onClickDate: this.handleTouchTap.bind(this, this.refs.enddatefield, 'end', 'date', formattedStartDate === startLabelDate),
formattedDate: formattedEndDate,
timeRef: 'endtimefield',
onClickTime: this.handleTouchTap.bind(this, this.refs.endtimefield, 'end', 'time', formattedEndDate === endLabelDate),
formattedTime: formattedEndTime
};
return _react2.default.createElement(
'div',
{ className: className, style: prepareStyles((0, _simpleAssign2.default)({}, style)) },
display ? display(startInfo, endInfo, this.handleFocus) : _react2.default.createElement(
'div',
{ style: (0, _simpleAssign2.default)({}, styles.textField, textFieldStyle) },
layout !== 'single' && _react2.default.createElement(
'div',
{ style: { width: '100%', fontWeight: 'semibold', marginBottom: '5px', fontSize: '15px' } },
'Pick Up'
),
_react2.default.createElement(
'div',
{ style: styles.startContainer },
_react2.default.createElement(
'div',
{
style: this.dateStyle(),
ref: 'startdatefield',
onFocus: this.handleFocus,
onClick: this.handleTouchTap.bind(this, this.refs.startdatefield, 'start', 'date', false)
},
_react2.default.createElement(
'span',
null,
formattedStartDate
),
layout === 'single' && formattedStartDate !== startLabelDate && _react2.default.createElement(
'span',
null,
','
),
this.dropdownArrow()
),
_react2.default.createElement(
'div',
{
style: this.timeStyle(formattedStartDate === startLabelDate),
ref: 'starttimefield',
onFocus: this.handleFocus,
onClick: this.handleTouchTap.bind(this, this.refs.starttimefield, 'start', 'time', formattedStartDate === startLabelDate)
},
_react2.default.createElement(
'span',
null,
formattedStartTime
),
this.dropdownArrow()
)
),
this.divider(),
layout !== 'single' && _react2.default.createElement(
'div',
{ style: { width: '100%', fontWeight: 'semibold', marginBottom: '5px', fontSize: '15px' } },
'Drop Off'
),
_react2.default.createElement(
'div',
{ style: styles.endContainer },
_react2.default.createElement(
'div',
{
style: this.dateStyle(formattedStartDate === startLabelDate),
ref: 'enddatefield',
onFocus: this.handleFocus,
onClick: this.handleTouchTap.bind(this, this.refs.enddatefield, 'end', 'date', formattedStartDate === startLabelDate)
},
_react2.default.createElement(
'span',
null,
formattedEndDate
),
layout === 'single' && formattedEndDate !== endLabelDate && _react2.default.createElement(
'span',
null,
','
),
this.dropdownArrow()
),
_react2.default.createElement(
'div',
{
style: this.timeStyle(formattedEndDate === endLabelDate),
ref: 'endtimefield',
onFocus: this.handleFocus,
onClick: this.handleTouchTap.bind(this, this.refs.endtimefield, 'end', 'time', formattedEndDate === endLabelDate)
},
_react2.default.createElement(
'span',
null,
formattedEndTime
),
this.dropdownArrow()
)
)
),
_react2.default.createElement(_DateRangePickerDialog2.default, {
DateTimeFormat: DateTimeFormat,
autoOk: autoOk,
autoOpenField: autoOpenField,
blockedDateTimeRanges: blockedDateTimeRanges,
calendarDateWidth: calendarDateWidth,
calendarTimeWidth: calendarTimeWidth,
cancelLabel: cancelLabel,
container: container,
dayButtonSize: dayButtonSize,
end: end,
endLabel: endLabel,
firstDayOfWeek: firstDayOfWeek,
initialStartDate: this.state.dialogStartDate,
initialEndDate: this.state.dialogEndDate,
locale: locale,
showCalendarDate: showCalendarDate,
showCalendarStatus: showCalendarStatus,
mode: mode,
okLabel: okLabel,
onAccept: this.handleAccept,
onUpdate: this.handleUpdate,
onShow: this.handleShow,
onDismiss: this.handleDismiss,
ref: 'dialogWindow',
start: start,
startLabel: startLabel,
utils: utils
})
);
}
}]);
return DateRangePicker;
}(_react.Component);
DateRangePicker.propTypes = {
/**
* Constructor for date formatting for the specified `locale`.
* The constructor must follow this specification: ECMAScript Internationalization API 1.0 (ECMA-402).
* `Intl.DateTimeFormat` is supported by most modern browsers, see http://caniuse.com/#search=intl,
* otherwise https://github.com/andyearnshaw/Intl.js is a good polyfill.
*
* By default, a built-in `DateTimeFormat` is used which supports the 'en-US' `locale`.
*/
DateTimeFormat: _propTypes2.default.func,
/**
* If true, automatically accept and close the picker on select a date.
*/
autoOk: _propTypes2.default.bool,
/**
* If true, automatically open the next datetime element
*/
autoOpenField: _propTypes2.default.bool,
/**
* Used to block datetime ranges on the date range picker
*/
blockedDateTimeRanges: _propTypes2.default.arrayOf(_propTypes2.default.shape({
/**
* The end datetime of a blocked range
*/
end: _propTypes2.default.object,
/**
* The start datetime of a blocked range
*/
start: _propTypes2.default.object
})),
/**
* Override the default width of the calendar when displaying days.
*/
calendarDateWidth: _propTypes2.default.string,
/**
* Override the default width of the calendar when displaying times.
*/
calendarTimeWidth: _propTypes2.default.string,
/**
* Override the default text of the 'Cancel' button.
*/
cancelLabel: _propTypes2.default.node,
/**
* The css class name of the root element.
*/
className: _propTypes2.default.string,
/**
* Used to control how the Date Picker will be displayed when the input field is focused.
* `dialog` (default) displays the DatePicker as a dialog with a modal.
* `inline` displays the DatePicker below the input field (similar to auto complete).
*/
container: _propTypes2.default.oneOf(['dialog', 'inline']),
/**
* Override the default size of day buttons.
*/
dayButtonSize: _propTypes2.default.string,
/**
* Disables the DatePicker.
*/
disabled: _propTypes2.default.bool,
/**
* Custom display function for date time fields.
*/
display: _propTypes2.default.func,
/**
* This is the container for attributes and methods specific to the 'end' calendar.
*/
end: _propTypes2.default.shape({
/**
* This is the initial date value of the component.
* If either `value` or `valueLink` is provided they will override this
* prop with `value` taking precedence.
*/
defaultDate: _propTypes2.default.object,
/**
* The ending of a range of valid dates. The range includes the endDate.
* The default value is current date + 100 years.
*/
maxDate: _propTypes2.default.object,
/**
* The beginning of a range of valid dates. The range includes the startDate.
* The default value is current date - 100 years.
*/
minDate: _propTypes2.default.object,
/**
* Callback function used to determine if a day's entry should be disabled on the calendar.
*
* @param {object} day Date object of a day.
* @returns {boolean} Indicates whether the day should be disabled.
*/
shouldDisableDate: _propTypes2.default.func
}),
/**
* Override the default text of the 'End' label.
*/
endLabel: _propTypes2.default.string,
/**
* Override the default text of the 'End' label for dates.
*/
endLabelDate: _propTypes2.default.string,
/**
* Override the default text of the 'End' label for times.
*/
endLabelTime: _propTypes2.default.string,
/**
* Used to change the first day of week. It varies from
* Saturday to Monday between different locales.
* The allowed range is 0 (Sunday) to 6 (Saturday).
* The default is `1`, Monday, as per ISO 8601.
*/
firstDayOfWeek: _propTypes2.default.number,
/**
* Override the default display formatting.
*/
formatDisplay: _propTypes2.default.func,
/**
* Determines if the component will show multiple boxes and the behavior
* when a user interacts with it.
*/
layout: _propTypes2.default.string,
/**
* Locale used for formatting the `DatePicker` date strings. Other than for 'en-US', you
* must provide a `DateTimeFormat` that supports the chosen `locale`.
*/
locale: _propTypes2.default.string,
/**
* Tells the component to display the picker in portrait or landscape mode.
*/
mode: _propTypes2.default.oneOf(['portrait', 'landscape']),
/**
* Override the default text of the 'OK' button.
*/
okLabel: _propTypes2.default.node,
/**
* Callback function that is fired when the date value changes.
*
* @param {null} null Since there is no particular event associated with the change,
* the first argument will always be null.
* @param {object} date The new date.
*/
onChange: _propTypes2.default.func,
/**
* Callback function that is fired when a touch tap event occurs on the Date Picker's `TextField`.
*
* @param {object} event TouchTap event targeting the `TextField`.
*/
onClick: _propTypes2.default.func,
/**
* Callback function that is fired when the Date Picker's dialog is dismissed.
*
* @param {null} null Since there is no particular event associated with the dismiss,
* the first argument will always be null.
* @param {object} date The new date or null dates.
*/
onDismiss: _propTypes2.default.func,
/**
* Callback function that is fired when the Date Picker's `TextField` gains focus.
*/
onFocus: _propTypes2.default.func,
/**
* Callback function that is fired when the Date Picker's dialog is shown.
*/
onShow: _propTypes2.default.func,
/**
* Shows the calendar date/time display. Defaults to false.
*/
showCalendarDate: _propTypes2.default.bool,
/**
* Shows the current step in the date/time selection. Defaults to false.
*/
showCalendarStatus: _propTypes2.default.bool,
/**
* This is the container for attributes and methods specific to the 'start' calendar.
*/
start: _propTypes2.default.shape({
/**
* This is the initial date value of the component.
* If either `value` or `valueLink` is provided they will override this
* prop with `value` taking precedence.
*/
defaultDate: _propTypes2.default.object,
/**
* The ending of a range of valid dates. The range includes the endDate.
* The default value is current date + 100 years.
*/
maxDate: _propTypes2.default.object,
/**
* The beginning of a range of valid dates. The range includes the startDate.
* The default value is current date - 100 years.
*/
minDate: _propTypes2.default.object,
/**
* Callback function used to determine if a day's entry should be disabled on the calendar.
*
* @param {object} day Date object of a day.
* @returns {boolean} Indicates whether the day should be disabled.
*/
shouldDisableDate: _propTypes2.default.func
}),
/**
* Override the default text of the 'Start' label.
*/
startLabel: _propTypes2.default.string,
/**
* Override the default text of the 'Start' label for dates.
*/
startLabelDate: _propTypes2.default.string,
/**
* Override the default text of the 'Start' label for times.
*/
startLabelTime: _propTypes2.default.string,
/**
* Override the inline-styles of the root element.
*/
style: _propTypes2.default.object,
/**
* Override the inline-styles of DatePicker's TextField element.
*/
textFieldStyle: _propTypes2.default.object,
/**
* This object should contain methods needed to build the calendar system.
*
* Useful for building a custom calendar system. Refer to the
* [source code](https://github.com/callemall/material-ui/blob/master/src/DatePicker/dateUtils.js)
* and an [example implementation](https://github.com/alitaheri/material-ui-persian-date-picker-utils)
* for more information.
*/
utils: _propTypes2.default.object,
/**
* Sets the date for the Date Picker programmatically.
*/
value: _propTypes2.default.shape({
/**
* The end date
*/
end: _propTypes2.default.object,
/**
* The start date
*/
start: _propTypes2.default.object
})
};
DateRangePicker.defaultProps = {
autoOk: false,
container: 'dialog',
disabled: false,
endLabel: 'End',
endLabelDate: 'Date',
endLabelTime: 'Time',
firstDayOfWeek: 1,
startLabel: 'Start',
startLabelDate: 'Date',
startLabelTime: 'Time',
style: {}
};
DateRangePicker.contextTypes = {
muiTheme: _propTypes2.default.object
};
DateRangePicker.childContextTypes = {
muiTheme: _propTypes2.default.object
};
exports.default = DateRangePicker;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EYXRlUGlja2VyL0RhdGVSYW5nZVBpY2tlci5qcyJdLCJuYW1lcyI6WyJEYXRlUmFuZ2VQaWNrZXIiLCJzdGF0ZSIsImRpYWxvZ1Zpc2libGUiLCJzdGFydERhdGUiLCJ1bmRlZmluZWQiLCJlbmREYXRlIiwic2VsZWN0ZWRTdGFydERhdGUiLCJzZWxlY3RlZEVuZERhdGUiLCJoYW5kbGVBY2NlcHQiLCJkYXRlcyIsImtlZXBPcGVuIiwiaXNDb250cm9sbGVkIiwic2V0U3RhdGUiLCJzdGFydCIsImVuZCIsInByb3BzIiwib25DaGFuZ2UiLCJoYW5kbGVVcGRhdGUiLCJoYW5kbGVTaG93Iiwib25TaG93IiwiaGFuZGxlRGlzbWlzcyIsIm9uRGlzbWlzcyIsImhhbmRsZUZvY3VzIiwiZXZlbnQiLCJ0YXJnZXQiLCJibHVyIiwib25Gb2N1cyIsImhhbmRsZVRvdWNoVGFwIiwic2hvd1JlZiIsInN0YXJ0RW5kIiwiZGF0ZVRpbWUiLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJzZXRUaW1lb3V0Iiwib3BlbkRpYWxvZyIsImZvcm1hdERhdGUiLCJkYXRlIiwibG9jYWxlIiwiRGF0ZVRpbWVGb3JtYXQiLCJkYXRlVGltZUZvcm1hdCIsImRheSIsIm1vbnRoIiwieWVhciIsImZvcm1hdCIsImRyb3Bkb3duQXJyb3ciLCJsYXlvdXQiLCJzdHlsZSIsImZpbGwiLCJ3aWR0aCIsImhlaWdodCIsIm1hcmdpblJpZ2h0IiwibXVpVGhlbWUiLCJnZXRUaGVtZSIsImNvbnRleHQiLCJuZXdEYXRlcyIsImdldENvbnRyb2xsZWREYXRlIiwibmV4dFByb3BzIiwidmFsdWUiLCJkaWFsb2dTdGFydERhdGUiLCJEYXRlIiwiZGlhbG9nRW5kRGF0ZSIsInJlZnMiLCJkaWFsb2dXaW5kb3ciLCJyZXNldCIsImJpbmQiLCJhbGxSZWZzIiwic3RhcnRkYXRlZmllbGQiLCJzdGFydFRpbWUiLCJzdGFydHRpbWVmaWVsZCIsImVuZGRhdGVmaWVsZCIsImVuZFRpbWUiLCJlbmR0aW1lZmllbGQiLCJnZXREYXRlcyIsInNob3ciLCJoYXNPd25Qcm9wZXJ0eSIsImxhYmVsIiwiSW50bCIsImhvdXIiLCJtaW51dGUiLCJob3VyMTIiLCJtYXJnaW4iLCJjb2xvciIsImxpbmVIZWlnaHQiLCJwYWRkaW5nTGVmdCIsImRpc3BsYXkiLCJqdXN0aWZ5Q29udGVudCIsImFsaWduSXRlbXMiLCJjdXJzb3IiLCJib3JkZXIiLCJ0ZXh0RmllbGQiLCJmbGV4V3JhcCIsImVuZENvbnRhaW5lciIsInN0YXJ0Q29udGFpbmVyIiwibWFyZ2luQm90dG9tIiwiYXV0b09rIiwiYXV0b09wZW5GaWVsZCIsImJsb2NrZWREYXRlVGltZVJhbmdlcyIsImNhbGVuZGFyRGF0ZVdpZHRoIiwiY2FsZW5kYXJUaW1lV2lkdGgiLCJjYW5jZWxMYWJlbCIsImNsYXNzTmFtZSIsImNvbnRhaW5lciIsImRheUJ1dHRvblNpemUiLCJlbmRMYWJlbCIsImVuZExhYmVsRGF0ZSIsImVuZExhYmVsVGltZSIsImZpcnN0RGF5T2ZXZWVrIiwiZm9ybWF0RGlzcGxheSIsIm1vZGUiLCJva0xhYmVsIiwic2hvd0NhbGVuZGFyRGF0ZSIsInNob3dDYWxlbmRhclN0YXR1cyIsInN0YXJ0TGFiZWwiLCJzdGFydExhYmVsRGF0ZSIsInN0YXJ0TGFiZWxUaW1lIiwidGV4dEZpZWxkU3R5bGUiLCJ1dGlscyIsIm90aGVyIiwicHJlcGFyZVN0eWxlcyIsInN0eWxlcyIsImdldFN0eWxlcyIsInN0YXJ0aW5nIiwiZW5kaW5nIiwiZm9ybWF0dGVkU3RhcnREYXRlIiwiZm9ybWF0RGF0ZUZvckRpc3BsYXkiLCJmb3JtYXR0ZWRTdGFydFRpbWUiLCJmb3JtYXRUaW1lRm9yRGlzcGxheSIsImZvcm1hdHRlZEVuZERhdGUiLCJmb3JtYXR0ZWRFbmRUaW1lIiwic3RhcnRJbmZvIiwiZGF0ZVJlZiIsIm9uQ2xpY2tEYXRlIiwiZm9ybWF0dGVkRGF0ZSIsInRpbWVSZWYiLCJvbkNsaWNrVGltZSIsImZvcm1hdHRlZFRpbWUiLCJlbmRJbmZvIiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwiZGF0ZVN0eWxlIiwidGltZVN0eWxlIiwiZGl2aWRlciIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImZ1bmMiLCJib29sIiwiYXJyYXlPZiIsInNoYXBlIiwib2JqZWN0Iiwic3RyaW5nIiwibm9kZSIsIm9uZU9mIiwiZGVmYXVsdERhdGUiLCJtYXhEYXRlIiwibWluRGF0ZSIsInNob3VsZERpc2FibGVEYXRlIiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwiY29udGV4dFR5cGVzIiwiY2hpbGRDb250ZXh0VHlwZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUE7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7SUFFTUEsZTs7Ozs7Ozs7Ozs7Ozs7d01BNlFKQyxLLEdBQVE7QUFDTkMscUJBQWUsS0FEVDtBQUVOQyxpQkFBV0MsU0FGTDtBQUdOQyxlQUFTRCxTQUhIO0FBSU5FLHlCQUFtQkYsU0FKYjtBQUtORyx1QkFBaUJIO0FBTFgsSyxRQStHUkksWSxHQUFlLFVBQUNDLEtBQUQsRUFBUUMsUUFBUixFQUFxQjtBQUNsQyxVQUFJLENBQUMsTUFBS0MsWUFBTCxFQUFMLEVBQTBCO0FBQ3hCLGNBQUtDLFFBQUwsQ0FBYztBQUNaVCxxQkFBV00sTUFBTUksS0FETDtBQUVaUixtQkFBU0ksTUFBTUssR0FGSDtBQUdaWix5QkFBZ0JRLFlBQVksS0FIaEI7QUFJWkosNkJBQW1CRyxNQUFNSSxLQUpiO0FBS1pOLDJCQUFpQkUsTUFBTUs7QUFMWCxTQUFkO0FBT0EsWUFBSSxNQUFLQyxLQUFMLENBQVdDLFFBQWYsRUFBeUI7QUFDdkIsZ0JBQUtELEtBQUwsQ0FBV0MsUUFBWCxDQUFvQixJQUFwQixFQUEwQlAsS0FBMUI7QUFDRDtBQUNGLE9BWEQsTUFXTztBQUNMLGNBQUtHLFFBQUwsQ0FBYztBQUNaVix5QkFBZ0JRLFlBQVk7QUFEaEIsU0FBZDtBQUdBLFlBQUksTUFBS0ssS0FBTCxDQUFX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