UNPKG

react-datepicker-moment-hijri

Version:

A simple and reusable datepicker component for React with hijra support

1,715 lines (1,386 loc) 108 kB
'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = _interopDefault(require('react')); var PropTypes = _interopDefault(require('prop-types')); var classnames = _interopDefault(require('classnames')); var moment = _interopDefault(require('moment-hijri')); var onClickOutside = _interopDefault(require('react-onclickoutside')); var reactPopper = require('react-popper'); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; 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 inherits = function (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 possibleConstructorReturn = function (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; }; var dayOfWeekCodes = { 1: "mon", 2: "tue", 3: "wed", 4: "thu", 5: "fri", 6: "sat", 7: "sun" }; // These functions are not exported so // that we avoid magic strings like 'days' function set(date, unit, to) { return date.set(unit, to); } function add(date, amount, unit) { return date.add(amount, unit); } function subtract(date, amount, unit) { return date.subtract(amount, unit); } function get(date, unit) { return date.get(unit); } function getStartOf(date, unit) { return date.startOf(unit); } function isSame(date1, date2, unit) { return date1.isSame(date2, unit); } function doFormat(date, format) { return date.format(format); } function englishToArabic(string) { return String(string).replace(/\d/g, function (c) { return String.fromCharCode(+c + 0x0660); }); } // ** Calendars ** var calendars = { gregorian: "gregorian", hijri: "hijri" }; // ** Function factories by calendar ** function addByCalendar(date, amount, unit, calendar) { switch (calendar) { case calendars.hijri: return addHijri(date, amount, unit); default: return add(date, amount, unit); } } function subtractByCalendar(date, amount, unit, calendar) { switch (calendar) { case calendars.hijri: return subtractHijri(date, amount, unit); default: return subtract(date, amount, unit); } } function setByCalendar(date, unit, to, calendar) { switch (calendar) { case calendars.hijri: return setHijri(date, unit, to); default: return set(date, unit, to); } } function getByCalendar(date, unit, calendar) { switch (calendar) { case calendars.hijri: return getHijri(date, unit); default: return get(date, unit); } } function getStartOfByCalendar(date, unit, calendar) { switch (calendar) { case calendars.hijri: return getStartOfHijri(date, unit); default: return getStartOf(date, unit); } } function formatDateByCalendar(date, format, calendar) { switch (calendar) { case calendars.hijri: format = convertFormatHijri(format); // fall-through default: return doFormat(date, format); } } function formatYearByCalendar(year, calendar) { switch (calendar) { case calendars.hijri: return englishToArabic(year); default: return year; } } function formatDayByCalendar(day, calendar) { switch (calendar) { case calendars.hijri: return englishToArabic(day); default: return day; } } function isSameByCalendar(date1, date2, unit, calendar) { switch (calendar) { case calendars.hijri: return isSameHijri(date1, date2, unit); default: return isSame(date1, date2, unit); } } function isBeforeByCalendar(date1, date2, unit, calendar) { switch (calendar) { case calendars.hijri: return isBeforeHijri(date1, date2, unit); default: return isBefore(date1, date2, unit); } } function isAfterByCalendar(date1, date2, unit, calendar) { switch (calendar) { case calendars.hijri: return isAfterHijri(date1, date2, unit); default: return isAfter(date1, date2, unit); } } // ** Hijri ** function setHijri(date, unit, to) { switch (unit) { case "year": case "years": return date.iYear(to); case "month": case "months": return date.iMonth(to); default: return set(date, unit, to); } } function addHijri(date, amount, unit) { switch (unit) { case "year": case "years": case "month": case "months": unit = "i" + unit; // fall-through default: return add(date, amount, unit); } } function subtractHijri(date, amount, unit) { switch (unit) { case "year": case "years": case "month": case "months": unit = "i" + unit; // fall-through default: return subtract(date, amount, unit); } } function isSameHijri(date1, date2, unit) { switch (unit) { case "year": case "years": case "month": case "months": unit = "i" + unit; if (date1 && date2) { var inputMs = date2.valueOf(); return date1.clone().startOf(unit).valueOf() <= inputMs && inputMs <= date1.clone().endOf(unit).valueOf(); } else { return false; } default: return isSame(date1, date2, unit); } } function isBeforeHijri(date1, date2, unit) { switch (unit) { case "year": case "years": case "month": case "months": unit = "i" + unit; if (date1 && date2) { return date1.clone().endOf(unit).valueOf() < date2.valueOf(); } else { return false; } default: return isBefore(date1, date2); } } function isAfterHijri(date1, date2, unit) { switch (unit) { case "year": case "years": case "month": case "months": unit = "i" + unit; if (date1 && date2) { return date2.valueOf() < date1.clone().endOf(unit).valueOf(); } else { return false; } default: return isBefore(date1, date2); } } function getHijri(date, unit) { switch (unit) { case "date": case "dates": return date.iDate(); case "week": case "weeks": return date.iWeek(); case "month": case "months": return date.iMonth(); case "year": case "years": return date.iYear(); default: return get(date, unit); } } function getStartOfHijri(date, unit) { switch (unit) { case "year": case "years": case "month": case "months": unit = "i" + unit; // fall-through default: return getStartOf(date, unit); } } function convertFormatHijri(format) { switch (format) { case "L": return "iMM/iDD/iYYYY"; default: return format.replace(/(Y+)/, "i$1").replace(/(D+)/, "i$1").replace(/(M+)/, "i$1").replace(/(w+)/, "i$1").replace(/(g+)/, "i$1"); } } // ** Date Constructors ** function newDate(point) { return moment(point); } function newDateWithOffset(utcOffset) { return moment().utc().utcOffset(utcOffset); } function now(maybeFixedUtcOffset) { if (maybeFixedUtcOffset == null) { return newDate(); } return newDateWithOffset(maybeFixedUtcOffset); } function cloneDate(date) { return date.clone(); } function parseDate(value, _ref) { var dateFormat = _ref.dateFormat, locale = _ref.locale; var m = moment(value, dateFormat, locale || moment.locale(), true); return m.isValid() ? m : null; } // ** Date "Reflection" ** function isMoment(date) { return moment.isMoment(date); } function isDate(date) { return moment.isDate(date); } // ** Date Formatting ** function formatDate(date, format) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return formatDateByCalendar(date, format, calendar); } function safeDateFormat(date, _ref2) { var dateFormat = _ref2.dateFormat, locale = _ref2.locale; var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; if (!date) { return ""; } var format = Array.isArray(dateFormat) ? dateFormat[0] : dateFormat; var cloned = date.clone().locale(locale || moment.locale()); return formatDateByCalendar(cloned, format, calendar) || ""; } function formatYear(year) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return formatYearByCalendar(year, calendar); } function formatDay(day) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return formatDayByCalendar(day, calendar); } // ** Date Setters ** function setTime(date, _ref3) { var hour = _ref3.hour, minute = _ref3.minute, second = _ref3.second; date.set({ hour: hour, minute: minute, second: second }); return date; } function setMonth(date, month) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return setByCalendar(date, "month", month, calendar); } function setYear(date, year) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return setByCalendar(date, "year", year, calendar); } // ** Date Getters ** function getSecond(date) { return get(date, "second"); } function getMinute(date) { return get(date, "minute"); } function getHour(date) { return get(date, "hour"); } // Returns day of week function getDay(date) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return getByCalendar(date, "day", calendar); } function getWeek(date) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return getByCalendar(date, "week", calendar); } function getMonth(date) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return getByCalendar(date, "month", calendar); } function getYear(date) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return getByCalendar(date, "year", calendar); } // Returns day of month function getDate(date) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return getByCalendar(date, "date", calendar); } function getDayOfWeekCode(day) { return dayOfWeekCodes[day.isoWeekday()]; } // *** Start of *** function getStartOfDay(date) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return getStartOfByCalendar(date, "day", calendar); } function getStartOfWeek(date) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return getStartOfByCalendar(date, "week", calendar); } function getStartOfMonth(date) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return getStartOfByCalendar(date, "month", calendar); } function getStartOfDate(date) { var calendar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : calendars.gregorian; return getStartOfByCalendar(date, "date", calendar); } // *** End of *** // ** Date Math ** // *** Addition *** function addMinutes(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return addByCalendar(date, amount, "minutes", calendar); } function addHours(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return addByCalendar(date, amount, "hours", calendar); } function addDays(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return addByCalendar(date, amount, "days", calendar); } function addWeeks(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return addByCalendar(date, amount, "weeks", calendar); } function addMonths(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return addByCalendar(date, amount, "months", calendar); } function addYears(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return addByCalendar(date, amount, "years", calendar); } // *** Subtraction *** function subtractDays(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return subtractByCalendar(date, amount, "days", calendar); } function subtractWeeks(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return subtractByCalendar(date, amount, "weeks", calendar); } function subtractMonths(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return subtractByCalendar(date, amount, "months", calendar); } function subtractYears(date, amount) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; return subtractByCalendar(date, amount, "years", calendar); } // ** Date Comparison ** function isBefore(date1, date2, unit) { return date1.isBefore(date2, unit); } function isAfter(date1, date2, unit) { return date1.isAfter(date2, unit); } function isSameYear(date1, date2) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; if (date1 && date2) { return isSameByCalendar(date1, date2, "year", calendar); } else { return !date1 && !date2; } } function isSameMonth(date1, date2) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; if (date1 && date2) { return isSameByCalendar(date1, date2, "month", calendar); } else { return !date1 && !date2; } } function isSameDay(date1, date2) { var calendar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : calendars.gregorian; if (date1 && date2) { return isSameByCalendar(date1, date2, "day", calendar); } else { return !date1 && !date2; } } function isDayInRange(day, startDate, endDate) { var before = startDate.clone().startOf("day").subtract(1, "seconds"); var after = endDate.clone().startOf("day").add(1, "seconds"); return day.clone().startOf("day").isBetween(before, after); } // *** Diffing *** // ** Date Localization ** function localizeDate(date, locale) { return date.clone().locale(locale || moment.locale()); } function getLocaleData(date) { return date.localeData(); } function getLocaleDataForLocale(locale) { return moment.localeData(locale); } function getWeekdayMinInLocale(locale, date) { return locale.weekdaysMin(date); } function getWeekdayShortInLocale(locale, date) { return locale.weekdaysShort(date); } // TODO what is this format exactly? function getMonthInLocale(locale, date, format) { var calendar = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : calendars.gregorian; switch (calendar) { case calendars.hijri: format = convertFormatHijri(format); break; } return locale.months(date, format); } function getMonthShortInLocale(locale, date) { return locale.monthsShort(date); } // ** Utils for some components ** function isDayDisabled(day) { var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, minDate = _ref4.minDate, maxDate = _ref4.maxDate, excludeDates = _ref4.excludeDates, includeDates = _ref4.includeDates, filterDate = _ref4.filterDate; return minDate && day.isBefore(minDate, "day") || maxDate && day.isAfter(maxDate, "day") || excludeDates && excludeDates.some(function (excludeDate) { return isSameDay(day, excludeDate); }) || includeDates && !includeDates.some(function (includeDate) { return isSameDay(day, includeDate); }) || filterDate && !filterDate(day.clone()) || false; } function isTimeDisabled(time, disabledTimes) { var l = disabledTimes.length; for (var i = 0; i < l; i++) { if (disabledTimes[i].get("hours") === time.get("hours") && disabledTimes[i].get("minutes") === time.get("minutes")) { return true; } } return false; } function isTimeInDisabledRange(time, _ref5) { var minTime = _ref5.minTime, maxTime = _ref5.maxTime; if (!minTime || !maxTime) { throw new Error("Both minTime and maxTime props required"); } var base = moment().hours(0).minutes(0).seconds(0); var baseTime = base.clone().hours(time.get("hours")).minutes(time.get("minutes")); var min = base.clone().hours(minTime.get("hours")).minutes(minTime.get("minutes")); var max = base.clone().hours(maxTime.get("hours")).minutes(maxTime.get("minutes")); return !(baseTime.isSameOrAfter(min) && baseTime.isSameOrBefore(max)); } function allDaysDisabledBefore(day, unit) { var _ref6 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, minDate = _ref6.minDate, includeDates = _ref6.includeDates, calendar = _ref6.calendar; var dateBefore = subtractByCalendar(day.clone(), 1, unit, calendar); return minDate && isBeforeByCalendar(dateBefore, minDate, unit, calendar) || includeDates && includeDates.every(function (includeDate) { return isBeforeByCalendar(dateBefore, includeDate, unit, calendar); }) || false; } function allDaysDisabledAfter(day, unit) { var _ref7 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, maxDate = _ref7.maxDate, includeDates = _ref7.includeDates, calendar = _ref7.calendar; var dateAfter = addByCalendar(day.clone(), 1, unit, calendar); return maxDate && isAfterByCalendar(dateAfter, maxDate, unit, calendar) || includeDates && includeDates.every(function (includeDate) { return isAfterByCalendar(dateAfter, includeDate, unit, calendar); }) || false; } function getEffectiveMinDate(_ref8) { var minDate = _ref8.minDate, includeDates = _ref8.includeDates; if (includeDates && minDate) { return moment.min(includeDates.filter(function (includeDate) { return minDate.isSameOrBefore(includeDate, "day"); })); } else if (includeDates) { return moment.min(includeDates); } else { return minDate; } } function getEffectiveMaxDate(_ref9) { var maxDate = _ref9.maxDate, includeDates = _ref9.includeDates; if (includeDates && maxDate) { return moment.max(includeDates.filter(function (includeDate) { return maxDate.isSameOrAfter(includeDate, "day"); })); } else if (includeDates) { return moment.max(includeDates); } else { return maxDate; } } function getHightLightDaysMap() { var highlightDates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var defaultClassName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "react-datepicker__day--highlighted"; var dateClasses = new Map(); for (var i = 0, len = highlightDates.length; i < len; i++) { var obj = highlightDates[i]; if (isMoment(obj)) { var key = obj.format("MM.DD.YYYY"); var classNamesArr = dateClasses.get(key) || []; if (!classNamesArr.includes(defaultClassName)) { classNamesArr.push(defaultClassName); dateClasses.set(key, classNamesArr); } } else if ((typeof obj === "undefined" ? "undefined" : _typeof(obj)) === "object") { var keys = Object.keys(obj); var className = keys[0]; var arrOfMoments = obj[keys[0]]; if (typeof className === "string" && arrOfMoments.constructor === Array) { for (var k = 0, _len = arrOfMoments.length; k < _len; k++) { var _key = arrOfMoments[k].format("MM.DD.YYYY"); var _classNamesArr = dateClasses.get(_key) || []; if (!_classNamesArr.includes(className)) { _classNamesArr.push(className); dateClasses.set(_key, _classNamesArr); } } } } } return dateClasses; } function timeToInjectAfter(startOfDay, currentTime, currentMultiplier, intervals, injectedTimes) { var l = injectedTimes.length; for (var i = 0; i < l; i++) { var injectedTime = addMinutes(addHours(cloneDate(startOfDay), getHour(injectedTimes[i])), getMinute(injectedTimes[i])); var nextTime = addMinutes(cloneDate(startOfDay), (currentMultiplier + 1) * intervals); if (injectedTime.isBetween(currentTime, nextTime)) { return injectedTimes[i]; } } return false; } function generateYears(year, noOfYear, minDate, maxDate, calendar) { var list = []; for (var i = 0; i < 2 * noOfYear + 1; i++) { var newYear = year + noOfYear - i; var isInRange = true; if (minDate) { isInRange = getYear(minDate, calendar) <= newYear; } if (maxDate && isInRange) { isInRange = getYear(maxDate, calendar) >= newYear; } if (isInRange) { list.push(newYear); } } return list; } var YearDropdownOptions = function (_React$Component) { inherits(YearDropdownOptions, _React$Component); function YearDropdownOptions(props) { classCallCheck(this, YearDropdownOptions); var _this = possibleConstructorReturn(this, _React$Component.call(this, props)); _this.renderOptions = function () { var selectedYear = _this.props.year; var options = _this.state.yearsList.map(function (year) { return React.createElement( "div", { className: selectedYear === year ? "react-datepicker__year-option --selected_year" : "react-datepicker__year-option", key: year, ref: year, onClick: _this.onChange.bind(_this, year) }, selectedYear === year ? React.createElement( "span", { className: "react-datepicker__year-option--selected" }, "\u2713" ) : "", formatYear(year, _this.props.calendar) ); }); var minYear = _this.props.minDate ? getYear(_this.props.minDate, _this.props.calendar) : null; var maxYear = _this.props.maxDate ? getYear(_this.props.maxDate, _this.props.calendar) : null; if (!maxYear || !_this.state.yearsList.find(function (year) { return year === maxYear; })) { options.unshift(React.createElement( "div", { className: "react-datepicker__year-option", ref: "upcoming", key: "upcoming", onClick: _this.incrementYears }, React.createElement("a", { className: "react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming" }) )); } if (!minYear || !_this.state.yearsList.find(function (year) { return year === minYear; })) { options.push(React.createElement( "div", { className: "react-datepicker__year-option", ref: "previous", key: "previous", onClick: _this.decrementYears }, React.createElement("a", { className: "react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous" }) )); } return options; }; _this.onChange = function (year) { _this.props.onChange(year); }; _this.handleClickOutside = function () { _this.props.onCancel(); }; _this.shiftYears = function (amount) { var years = _this.state.yearsList.map(function (year) { return year + amount; }); _this.setState({ yearsList: years }); }; _this.incrementYears = function () { return _this.shiftYears(1); }; _this.decrementYears = function () { return _this.shiftYears(-1); }; var yearDropdownItemNumber = props.yearDropdownItemNumber, scrollableYearDropdown = props.scrollableYearDropdown; var noOfYear = yearDropdownItemNumber || (scrollableYearDropdown ? 10 : 5); _this.state = { yearsList: generateYears(_this.props.year, noOfYear, _this.props.minDate, _this.props.maxDate, _this.props.calendar) }; return _this; } YearDropdownOptions.prototype.render = function render() { var dropdownClass = classnames({ "react-datepicker__year-dropdown": true, "react-datepicker__year-dropdown--scrollable": this.props.scrollableYearDropdown }); return React.createElement( "div", { className: dropdownClass }, this.renderOptions() ); }; return YearDropdownOptions; }(React.Component); YearDropdownOptions.propTypes = { minDate: PropTypes.object, maxDate: PropTypes.object, onCancel: PropTypes.func.isRequired, onChange: PropTypes.func.isRequired, scrollableYearDropdown: PropTypes.bool, year: PropTypes.number.isRequired, yearDropdownItemNumber: PropTypes.number, calendar: PropTypes.string }; var WrappedYearDropdownOptions = onClickOutside(YearDropdownOptions); var YearDropdown = function (_React$Component) { inherits(YearDropdown, _React$Component); function YearDropdown() { var _temp, _this, _ret; classCallCheck(this, YearDropdown); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = { dropdownVisible: false }, _this.renderSelectOptions = function () { var minYear = _this.props.minDate ? getYear(_this.props.minDate) : 1900; var maxYear = _this.props.maxDate ? getYear(_this.props.maxDate) : 2100; var options = []; for (var i = minYear; i <= maxYear; i++) { options.push(React.createElement( "option", { key: i, value: i }, i )); } return options; }, _this.onSelectChange = function (e) { _this.onChange(e.target.value); }, _this.renderSelectMode = function () { return React.createElement( "select", { value: _this.props.year, className: "react-datepicker__year-select", onChange: _this.onSelectChange }, _this.renderSelectOptions() ); }, _this.renderReadView = function (visible) { return React.createElement( "div", { key: "read", style: { visibility: visible ? "visible" : "hidden" }, className: "react-datepicker__year-read-view", onClick: function onClick(event) { return _this.toggleDropdown(event); } }, React.createElement("span", { className: "react-datepicker__year-read-view--down-arrow" }), React.createElement( "span", { className: "react-datepicker__year-read-view--selected-year" }, formatYear(_this.props.year, _this.props.calendar) ) ); }, _this.renderDropdown = function () { return React.createElement(WrappedYearDropdownOptions, { key: "dropdown", ref: "options", year: _this.props.year, onChange: _this.onChange, onCancel: _this.toggleDropdown, minDate: _this.props.minDate, maxDate: _this.props.maxDate, scrollableYearDropdown: _this.props.scrollableYearDropdown, yearDropdownItemNumber: _this.props.yearDropdownItemNumber, calendar: _this.props.calendar }); }, _this.renderScrollMode = function () { var dropdownVisible = _this.state.dropdownVisible; var result = [_this.renderReadView(!dropdownVisible)]; if (dropdownVisible) { result.unshift(_this.renderDropdown()); } return result; }, _this.onChange = function (year) { _this.toggleDropdown(); if (year === _this.props.year) return; _this.props.onChange(year); }, _this.toggleDropdown = function (event) { _this.setState({ dropdownVisible: !_this.state.dropdownVisible }, function () { if (_this.props.adjustDateOnChange) { _this.handleYearChange(_this.props.date, event); } }); }, _this.handleYearChange = function (date, event) { _this.onSelect(date, event); _this.setOpen(); }, _this.onSelect = function (date, event) { if (_this.props.onSelect) { _this.props.onSelect(date, event); } }, _this.setOpen = function () { if (_this.props.setOpen) { _this.props.setOpen(true); } }, _temp), possibleConstructorReturn(_this, _ret); } YearDropdown.prototype.render = function render() { var renderedDropdown = void 0; switch (this.props.dropdownMode) { case "scroll": renderedDropdown = this.renderScrollMode(); break; case "select": renderedDropdown = this.renderSelectMode(); break; } return React.createElement( "div", { className: "react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--" + this.props.dropdownMode }, renderedDropdown ); }; return YearDropdown; }(React.Component); YearDropdown.propTypes = { adjustDateOnChange: PropTypes.bool, dropdownMode: PropTypes.oneOf(["scroll", "select"]).isRequired, maxDate: PropTypes.object, minDate: PropTypes.object, onChange: PropTypes.func.isRequired, scrollableYearDropdown: PropTypes.bool, year: PropTypes.number.isRequired, yearDropdownItemNumber: PropTypes.number, date: PropTypes.object, onSelect: PropTypes.func, setOpen: PropTypes.func, calendar: PropTypes.string }; var MonthDropdownOptions = function (_React$Component) { inherits(MonthDropdownOptions, _React$Component); function MonthDropdownOptions() { var _temp, _this, _ret; classCallCheck(this, MonthDropdownOptions); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.renderOptions = function () { return _this.props.monthNames.map(function (month, i) { return React.createElement( "div", { className: _this.props.month === i ? "react-datepicker__month-option --selected_month" : "react-datepicker__month-option", key: month, ref: month, onClick: _this.onChange.bind(_this, i) }, _this.props.month === i ? React.createElement( "span", { className: "react-datepicker__month-option--selected" }, "\u2713" ) : "", month ); }); }, _this.onChange = function (month) { return _this.props.onChange(month); }, _this.handleClickOutside = function () { return _this.props.onCancel(); }, _temp), possibleConstructorReturn(_this, _ret); } MonthDropdownOptions.prototype.render = function render() { return React.createElement( "div", { className: "react-datepicker__month-dropdown" }, this.renderOptions() ); }; return MonthDropdownOptions; }(React.Component); MonthDropdownOptions.propTypes = { onCancel: PropTypes.func.isRequired, onChange: PropTypes.func.isRequired, month: PropTypes.number.isRequired, monthNames: PropTypes.arrayOf(PropTypes.string.isRequired).isRequired }; var WrappedMonthDropdownOptions = onClickOutside(MonthDropdownOptions); var MonthDropdown = function (_React$Component) { inherits(MonthDropdown, _React$Component); function MonthDropdown() { var _temp, _this, _ret; classCallCheck(this, MonthDropdown); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = { dropdownVisible: false }, _this.renderSelectOptions = function (monthNames) { return monthNames.map(function (M, i) { return React.createElement( "option", { key: i, value: i }, M ); }); }, _this.renderSelectMode = function (monthNames) { return React.createElement( "select", { value: _this.props.month, className: "react-datepicker__month-select", onChange: function onChange(e) { return _this.onChange(e.target.value); } }, _this.renderSelectOptions(monthNames) ); }, _this.renderReadView = function (visible, monthNames) { return React.createElement( "div", { key: "read", style: { visibility: visible ? "visible" : "hidden" }, className: "react-datepicker__month-read-view", onClick: _this.toggleDropdown }, React.createElement("span", { className: "react-datepicker__month-read-view--down-arrow" }), React.createElement( "span", { className: "react-datepicker__month-read-view--selected-month" }, monthNames[_this.props.month] ) ); }, _this.renderDropdown = function (monthNames) { return React.createElement(WrappedMonthDropdownOptions, { key: "dropdown", ref: "options", month: _this.props.month, monthNames: monthNames, onChange: _this.onChange, onCancel: _this.toggleDropdown }); }, _this.renderScrollMode = function (monthNames) { var dropdownVisible = _this.state.dropdownVisible; var result = [_this.renderReadView(!dropdownVisible, monthNames)]; if (dropdownVisible) { result.unshift(_this.renderDropdown(monthNames)); } return result; }, _this.onChange = function (month) { _this.toggleDropdown(); if (month !== _this.props.month) { _this.props.onChange(month); } }, _this.toggleDropdown = function () { return _this.setState({ dropdownVisible: !_this.state.dropdownVisible }); }, _temp), possibleConstructorReturn(_this, _ret); } MonthDropdown.prototype.render = function render() { var _this2 = this; var localeData = getLocaleDataForLocale(this.props.locale); var monthNames = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(this.props.useShortMonthInDropdown ? function (M) { return getMonthShortInLocale(localeData, newDate({ M: M })); } : function (M) { return getMonthInLocale(localeData, newDate({ M: M }), _this2.props.dateFormat, _this2.props.calendar); }); var renderedDropdown = void 0; switch (this.props.dropdownMode) { case "scroll": renderedDropdown = this.renderScrollMode(monthNames); break; case "select": renderedDropdown = this.renderSelectMode(monthNames); break; } return React.createElement( "div", { className: "react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--" + this.props.dropdownMode }, renderedDropdown ); }; return MonthDropdown; }(React.Component); MonthDropdown.propTypes = { dropdownMode: PropTypes.oneOf(["scroll", "select"]).isRequired, locale: PropTypes.string, dateFormat: PropTypes.string.isRequired, month: PropTypes.number.isRequired, onChange: PropTypes.func.isRequired, useShortMonthInDropdown: PropTypes.bool, calendar: PropTypes.string }; function generateMonthYears(minDate, maxDate) { var list = []; var currDate = getStartOfMonth(cloneDate(minDate)); var lastDate = getStartOfMonth(cloneDate(maxDate)); while (!isAfter(currDate, lastDate)) { list.push(cloneDate(currDate)); addMonths(currDate, 1); } return list; } var MonthYearDropdownOptions = function (_React$Component) { inherits(MonthYearDropdownOptions, _React$Component); function MonthYearDropdownOptions(props) { classCallCheck(this, MonthYearDropdownOptions); var _this = possibleConstructorReturn(this, _React$Component.call(this, props)); _this.renderOptions = function () { return _this.state.monthYearsList.map(function (monthYear) { var monthYearPoint = monthYear.valueOf(); var isSameMonthYear = isSameYear(_this.props.date, monthYear) && isSameMonth(_this.props.date, monthYear); return React.createElement( "div", { className: isSameMonthYear ? "react-datepicker__month-year-option --selected_month-year" : "react-datepicker__month-year-option", key: monthYearPoint, ref: monthYearPoint, onClick: _this.onChange.bind(_this, monthYearPoint) }, isSameMonthYear ? React.createElement( "span", { className: "react-datepicker__month-year-option--selected" }, "\u2713" ) : "", formatDate(monthYear, _this.props.dateFormat) ); }); }; _this.onChange = function (monthYear) { return _this.props.onChange(monthYear); }; _this.handleClickOutside = function () { _this.props.onCancel(); }; _this.state = { monthYearsList: generateMonthYears(_this.props.minDate, _this.props.maxDate) }; return _this; } MonthYearDropdownOptions.prototype.render = function render() { var dropdownClass = classnames({ "react-datepicker__month-year-dropdown": true, "react-datepicker__month-year-dropdown--scrollable": this.props.scrollableMonthYearDropdown }); return React.createElement( "div", { className: dropdownClass }, this.renderOptions() ); }; return MonthYearDropdownOptions; }(React.Component); MonthYearDropdownOptions.propTypes = { minDate: PropTypes.object.isRequired, maxDate: PropTypes.object.isRequired, onCancel: PropTypes.func.isRequired, onChange: PropTypes.func.isRequired, scrollableMonthYearDropdown: PropTypes.bool, date: PropTypes.object.isRequired, dateFormat: PropTypes.string.isRequired }; var WrappedMonthYearDropdownOptions = onClickOutside(MonthYearDropdownOptions); var MonthYearDropdown = function (_React$Component) { inherits(MonthYearDropdown, _React$Component); function MonthYearDropdown() { var _temp, _this, _ret; classCallCheck(this, MonthYearDropdown); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = { dropdownVisible: false }, _this.renderSelectOptions = function () { var currDate = getStartOfMonth(localizeDate(_this.props.minDate, _this.props.locale)); var lastDate = getStartOfMonth(localizeDate(_this.props.maxDate, _this.props.locale)); var options = []; while (!isAfter(currDate, lastDate)) { var timepoint = currDate.valueOf(); options.push(React.createElement( "option", { key: timepoint, value: timepoint }, formatDate(currDate, _this.props.dateFormat, _this.props.calendar) )); addMonths(currDate, 1); } return options; }, _this.onSelectChange = function (e) { _this.onChange(e.target.value); }, _this.renderSelectMode = function () { return React.createElement( "select", { value: getStartOfMonth(_this.props.date).valueOf(), className: "react-datepicker__month-year-select", onChange: _this.onSelectChange }, _this.renderSelectOptions() ); }, _this.renderReadView = function (visible) { var yearMonth = formatDate(localizeDate(newDate(_this.props.date), _this.props.locale), _this.props.dateFormat); return React.createElement( "div", { key: "read", style: { visibility: visible ? "visible" : "hidden" }, className: "react-datepicker__month-year-read-view", onClick: function onClick(event) { return _this.toggleDropdown(event); } }, React.createElement("span", { className: "react-datepicker__month-year-read-view--down-arrow" }), React.createElement( "span", { className: "react-datepicker__month-year-read-view--selected-month-year" }, yearMonth ) ); }, _this.renderDropdown = function () { return React.createElement(WrappedMonthYearDropdownOptions, { key: "dropdown", ref: "options", date: _this.props.date, dateFormat: _this.props.dateFormat, onChange: _this.onChange, onCancel: _this.toggleDropdown, minDate: localizeDate(_this.props.minDate, _this.props.locale), maxDate: localizeDate(_this.props.maxDate, _this.props.locale), scrollableMonthYearDropdown: _this.props.scrollableMonthYearDropdown }); }, _this.renderScrollMode = function () { var dropdownVisible = _this.state.dropdownVisible; var result = [_this.renderReadView(!dropdownVisible)]; if (dropdownVisible) { result.unshift(_this.renderDropdown()); } return result; }, _this.onChange = function (monthYearPoint) { _this.toggleDropdown(); var changedDate = newDate(parseInt(monthYearPoint)); if (isSameYear(_this.props.date, changedDate) && isSameMonth(_this.props.date, changedDate)) { return; } _this.props.onChange(changedDate); }, _this.toggleDropdown = function () { return _this.setState({ dropdownVisible: !_this.state.dropdownVisible }); }, _temp), possibleConstructorReturn(_this, _ret); } MonthYearDropdown.prototype.render = function render() { var renderedDropdown = void 0; switch (this.props.dropdownMode) { case "scroll": renderedDropdown = this.renderScrollMode(); break; case "select": renderedDropdown = this.renderSelectMode(); break; } return React.createElement( "div", { className: "react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--" + this.props.dropdownMode }, renderedDropdown ); }; return MonthYearDropdown; }(React.Component); MonthYearDropdown.propTypes = { dropdownMode: PropTypes.oneOf(["scroll", "select"]).isRequired, dateFormat: PropTypes.string.isRequired, locale: PropTypes.string, maxDate: PropTypes.object.isRequired, minDate: PropTypes.object.isRequired, date: PropTypes.object.isRequired, onChange: PropTypes.func.isRequired, scrollableMonthYearDropdown: PropTypes.bool, calendar: PropTypes.string }; var Day = function (_React$Component) { inherits(Day, _React$Component); function Day() { var _temp, _this, _ret; classCallCheck(this, Day); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.handleClick = function (event) { if (!_this.isDisabled() && _this.props.onClick) { _this.props.onClick(event); } }, _this.handleMouseEnter = function (event) { if (!_this.isDisabled() && _this.props.onMouseEnter) { _this.props.onMouseEnter(event); } }, _this.isSameDay = function (other) { return isSameDay(_this.props.day, other); }, _this.isKeyboardSelected = function () { return !_this.props.inline && !_this.isSameDay(_this.props.selected) && _this.isSameDay(_this.props.preSelection); }, _this.isDisabled = function () { return isDayDisabled(_this.props.day, _this.props); }, _this.getHighLightedClass = function (defaultClassName) { var _this$props = _this.props, day = _this$props.day, highlightDates = _this$props.highlightDates; if (!highlightDates) { return false; } // Looking for className in the Map of {'day string, 'className'} var dayStr = day.format("MM.DD.YYYY"); return highlightDates.get(dayStr); }, _this.isInRange = function () { var _this$props2 = _this.props, day = _this$props2.day, startDate = _this$props2.startDate, endDate = _this$props2.endDate; if (!startDate || !endDate) { return false; } return isDayInRange(day, startDate, endDate); }, _this.isInSelectingRange = function () { var _this$props3 = _this.props, day = _this$props3.day, selectsStart = _this$props3.selectsStart, selectsEnd = _this$props3.selectsEnd, selectingDate = _this$props3.selectingDate, startDate = _this$props3.startDate, endDate = _this$props3.endDate; if (!(selectsStart || selectsEnd) || !selectingDate || _this.isDisabled()) { return false; } if (selectsStart && endDate && selectingDate.isSameOrBefore(endDate)) { return isDayInRange(day, selectingDate, endDate); } if (selectsEnd && startDate && selectingDate.isSameOrAfter(startDate)) { return isDayInRange(day, startDate, selectingDate); } return false; }, _this.isSelectingRangeStart = function () { if (!_this.isInSelectingRange()) { return false; } var _this$props4 = _this.props, day = _this$props4.day, selectingDate = _this$props4.selectingDate, startDate = _this$props4.startDate, selectsStart = _this$props4.selectsStart; if (selectsStart) { return isSameDay(day, selectingDate); } else { return isSameDay(day, startDate); } }, _this.isSelectingRangeEnd = function () { if (!_this.isInSelectingRange()) { return false; } var _this$props5 = _this.props, day = _this$props5.day, selectingDate = _this$props5.selectingDate, endDate = _this$props5.endDate, selectsEnd = _this$props5.selectsEnd; if (selectsEnd) { return isSameDay(day, selectingDate); } else { return isSameDay(day, endDate); } }, _this.isRangeStart = function () { var _this$props6 = _this.props, day = _this$props6.day, startDate = _this$props6.startDate, endDate = _this$props6.endDate; if (!startDate || !endDate) { return false; } return isSameDay(startDate, day); }, _this.isRangeEnd = function () { var _this$props7 = _this.props, day = _this$props7.day, startDate = _this$props7.startDate, endDate = _this$props7.endDate; if (!startDate || !endDate) { return false; } return isSameDay(endDate, day); }, _this.isWeekend = function () { var weekday = getDay(_this.props.day); return weekday === 0 || weekday === 6; }, _this.isOutsideMonth = function () { return _this.props.month !== undefined && _this.props.month !== getMonth(_this.props.day); }, _this.getClassNames = function (date) { var dayClassName = _this.props.dayClassName ? _this.props.dayClassName(date) : undefined; return classnames("react-datepicker__day", dayClassName, "react-datepicker__day--" + getDayOfWeekCode(_this.props.day), { "react-datepicker__day--disabled": _this.isDisabled(), "react-datepicker__day--selected": _this.isSameDay(_this.props.selected), "react-datepicker__day--keyboard-selected": _this.isKeyboardSelected(), "react-datepicker__day--range-start": _this.isRangeStart(), "react-datepicker__day--range-end": _this.isRangeEnd(), "react-datepicker__day--in-range": _this.isInRange(), "react-datepicker__day--in-selecting-range": _this.isInSelectingRange(), "react-datepicker__day--selecting-range-start": _this.isSelectingR