react-datepicker-moment-hijri
Version:
A simple and reusable datepicker component for React with hijra support
1,715 lines (1,386 loc) • 108 kB
JavaScript
'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