|
358 | 358 | exports.clone = clone;
|
359 | 359 | exports.addMonths = addMonths;
|
360 | 360 | exports.isSameDay = isSameDay;
|
| 361 | + exports.isDayBefore = isDayBefore; |
| 362 | + exports.isDayAfter = isDayAfter; |
361 | 363 | exports.isPastDay = isPastDay;
|
362 | 364 | exports.isFutureDay = isFutureDay;
|
363 | 365 | exports.isDayBetween = isDayBetween;
|
|
402 | 404 | );
|
403 | 405 | }
|
404 | 406 |
|
| 407 | + /** |
| 408 | + * Returns `true` if the first day is before the second day. |
| 409 | + * |
| 410 | + * @export |
| 411 | + * @param {Date} d1 |
| 412 | + * @param {Date} d2 |
| 413 | + * @returns {Boolean} |
| 414 | + */ |
| 415 | + function isDayBefore(d1, d2) { |
| 416 | + var day1 = clone(d1).setHours(0, 0, 0, 0); |
| 417 | + var day2 = clone(d2).setHours(0, 0, 0, 0); |
| 418 | + return day1 < day2; |
| 419 | + } |
| 420 | + |
| 421 | + /** |
| 422 | + * Returns `true` if the first day is after the second day. |
| 423 | + * |
| 424 | + * @export |
| 425 | + * @param {Date} d1 |
| 426 | + * @param {Date} d2 |
| 427 | + * @returns {Boolean} |
| 428 | + */ |
| 429 | + function isDayAfter(d1, d2) { |
| 430 | + var day1 = clone(d1).setHours(0, 0, 0, 0); |
| 431 | + var day2 = clone(d2).setHours(0, 0, 0, 0); |
| 432 | + return day1 > day2; |
| 433 | + } |
| 434 | + |
405 | 435 | /**
|
406 | 436 | * Return `true` if a day is in the past, e.g. yesterday or any day
|
407 | 437 | * before yesterday.
|
|
412 | 442 | function isPastDay(d) {
|
413 | 443 | var today = new Date();
|
414 | 444 | today.setHours(0, 0, 0, 0);
|
415 |
| - return d < today; |
| 445 | + return isDayBefore(d, today); |
416 | 446 | }
|
417 | 447 |
|
418 | 448 | /**
|
|
439 | 469 | */
|
440 | 470 | function isDayBetween(d, d1, d2) {
|
441 | 471 | var date = clone(d);
|
442 |
| - var date1 = clone(d1); |
443 |
| - var date2 = clone(d2); |
444 |
| - |
445 | 472 | date.setHours(0, 0, 0, 0);
|
446 |
| - date1.setHours(0, 0, 0, 0); |
447 |
| - date2.setHours(0, 0, 0, 0); |
448 | 473 | return (
|
449 |
| - (date1 < date && date < date2) || (date2 < date && date < date1) |
| 474 | + (isDayAfter(date, d1) && isDayBefore(date, d2)) || |
| 475 | + (isDayAfter(date, d2) && isDayBefore(date, d1)) |
450 | 476 | );
|
451 | 477 | }
|
452 | 478 |
|
|
467 | 493 | if (!from) {
|
468 | 494 | from = day;
|
469 | 495 | } else if (
|
470 |
| - from && to && isSameDay(from, to) && isSameDay(day, from) |
| 496 | + from && |
| 497 | + to && |
| 498 | + isSameDay(from, to) && |
| 499 | + isSameDay(day, from) |
471 | 500 | ) {
|
472 | 501 | from = null;
|
473 | 502 | to = null;
|
474 |
| - } else if (to && day < from) { |
| 503 | + } else if (to && isDayBefore(day, from)) { |
475 | 504 | from = day;
|
476 | 505 | } else if (to && isSameDay(day, to)) {
|
477 | 506 | from = day;
|
478 | 507 | to = day;
|
479 | 508 | } else {
|
480 | 509 | to = day;
|
481 |
| - if (to < from) { |
| 510 | + if (isDayBefore(to, from)) { |
482 | 511 | to = from;
|
483 | 512 | from = day;
|
484 | 513 | }
|
|
1028 | 1057 | return (0, _DateUtils.isDayInRange)(d, range);
|
1029 | 1058 | }
|
1030 | 1059 | if (day.after) {
|
1031 |
| - return d > day.after; |
| 1060 | + return (0, _DateUtils.isDayAfter)(d, day.after); |
1032 | 1061 | }
|
1033 | 1062 | if (day.before) {
|
1034 |
| - return d < day.before; |
| 1063 | + return (0, _DateUtils.isDayBefore)(d, day.before); |
| 1064 | + } |
| 1065 | + if (typeof day === 'function' && day(d)) { |
| 1066 | + return true; |
1035 | 1067 | }
|
1036 | 1068 | return false;
|
1037 | 1069 | })
|
1038 | 1070 | ) {
|
1039 | 1071 | modifiers.push(modifier);
|
1040 | 1072 | }
|
1041 | 1073 | } else if (
|
1042 |
| - isRangeOfDates(value) && (0, _DateUtils.isDayInRange)(d, value) |
| 1074 | + isRangeOfDates(value) && |
| 1075 | + (0, _DateUtils.isDayInRange)(d, value) |
1043 | 1076 | ) {
|
1044 | 1077 | // modifier's value is a range
|
1045 | 1078 | modifiers.push(modifier);
|
1046 |
| - } else if (value.after && d > value.after) { |
| 1079 | + } else if ( |
| 1080 | + value.after && |
| 1081 | + (0, _DateUtils.isDayAfter)(d, value.after) |
| 1082 | + ) { |
1047 | 1083 | // modifier's value has an after date
|
1048 | 1084 | modifiers.push(modifier);
|
1049 |
| - } else if (value.before && d < value.before) { |
| 1085 | + } else if ( |
| 1086 | + value.before && |
| 1087 | + (0, _DateUtils.isDayBefore)(d, value.before) |
| 1088 | + ) { |
1050 | 1089 | // modifier's value has an after date
|
1051 | 1090 | modifiers.push(modifier);
|
1052 | 1091 | } else if (typeof value === 'function' && value(d)) {
|
|
1886 | 1925 | classNames: this.props.classNames,
|
1887 | 1926 | day: day,
|
1888 | 1927 | modifiers: modifiers,
|
| 1928 | + modifiersStyles: this.props.modifiersStyles, |
1889 | 1929 | empty: isOutside &&
|
1890 | 1930 | !this.props.enableOutsideDays &&
|
1891 | 1931 | !this.props.fixedWeeks,
|
|
1990 | 2030 | return DayPicker;
|
1991 | 2031 | })(_react.Component);
|
1992 | 2032 |
|
1993 |
| - DayPicker.VERSION = '5.2.3'; |
| 2033 | + DayPicker.VERSION = '5.3.0'; |
1994 | 2034 | DayPicker.propTypes = {
|
1995 | 2035 | // Rendering months
|
1996 | 2036 | initialMonth: _PropTypes2.default.instanceOf(Date),
|
|
2011 | 2051 | _PropTypes.ModifierPropType,
|
2012 | 2052 | _PropTypes2.default.arrayOf(_PropTypes.ModifierPropType),
|
2013 | 2053 | ]),
|
| 2054 | + |
2014 | 2055 | modifiers: _PropTypes2.default.object,
|
| 2056 | + modifiersStyles: _PropTypes2.default.object, |
2015 | 2057 |
|
2016 | 2058 | // Localization
|
2017 | 2059 | dir: _PropTypes2.default.string,
|
|
2258 | 2300 |
|
2259 | 2301 | function Day(_ref) {
|
2260 | 2302 | var classNames = _ref.classNames,
|
| 2303 | + modifiersStyles = _ref.modifiersStyles, |
2261 | 2304 | day = _ref.day,
|
2262 | 2305 | tabIndex = _ref.tabIndex,
|
2263 | 2306 | empty = _ref.empty,
|
|
2285 | 2328 | })
|
2286 | 2329 | .join('');
|
2287 | 2330 | }
|
| 2331 | + |
| 2332 | + var style = void 0; |
| 2333 | + if (modifiersStyles) { |
| 2334 | + Object.keys(modifiers) |
| 2335 | + .filter(function(modifier) { |
| 2336 | + return !!modifiersStyles[modifier]; |
| 2337 | + }) |
| 2338 | + .forEach(function(modifier) { |
| 2339 | + style = Object.assign({}, style, modifiersStyles[modifier]); |
| 2340 | + }); |
| 2341 | + } |
| 2342 | + |
2288 | 2343 | if (empty) {
|
2289 | 2344 | return _react2.default.createElement('div', {
|
2290 | 2345 | role: 'gridcell',
|
2291 | 2346 | 'aria-disabled': true,
|
2292 | 2347 | className: className,
|
| 2348 | + style: style, |
2293 | 2349 | });
|
2294 | 2350 | }
|
| 2351 | + |
2295 | 2352 | return _react2.default.createElement(
|
2296 | 2353 | 'div',
|
2297 | 2354 | {
|
2298 | 2355 | className: className,
|
2299 | 2356 | tabIndex: tabIndex,
|
| 2357 | + style: style, |
2300 | 2358 | role: 'gridcell',
|
2301 | 2359 | 'aria-label': ariaLabel,
|
2302 | 2360 | 'aria-disabled': ariaDisabled.toString(),
|
|
2326 | 2384 | ariaSelected: _PropTypes2.default.bool,
|
2327 | 2385 | empty: _PropTypes2.default.bool,
|
2328 | 2386 | modifiers: _PropTypes2.default.object,
|
| 2387 | + modifiersStyles: _PropTypes2.default.object, |
2329 | 2388 | onClick: _PropTypes2.default.func,
|
2330 | 2389 | onKeyDown: _PropTypes2.default.func,
|
2331 | 2390 | onMouseEnter: _PropTypes2.default.func,
|
|
0 commit comments