UNPKG

react-day-picker

Version:

Flexible date picker component for React

73 lines (69 loc) 1.89 kB
import { isDayAfter, isDayBefore, isDayInRange, isSameDay } from './DateUtils'; import { isRangeOfDates } from './Helpers'; /** * Return `true` if a date matches the specified modifier. * * @export * @param {Date} day * @param {Any} modifier * @return {Boolean} */ export function dayMatchesModifier(day, modifier) { if (!modifier) { return false; } const arr = Array.isArray(modifier) ? modifier : [modifier]; return arr.some(mod => { if (!mod) { return false; } if (mod instanceof Date) { return isSameDay(day, mod); } if (isRangeOfDates(mod)) { return isDayInRange(day, mod); } if (mod.after && mod.before && isDayAfter(mod.before, mod.after)) { return isDayAfter(day, mod.after) && isDayBefore(day, mod.before); } if ( mod.after && mod.before && (isDayAfter(mod.after, mod.before) || isSameDay(mod.after, mod.before)) ) { return isDayAfter(day, mod.after) || isDayBefore(day, mod.before); } if (mod.after) { return isDayAfter(day, mod.after); } if (mod.before) { return isDayBefore(day, mod.before); } if (mod.daysOfWeek) { return mod.daysOfWeek.some(dayOfWeek => day.getDay() === dayOfWeek); } if (typeof mod === 'function') { return mod(day); } return false; }); } /** * Return the modifiers matching the given day for the given * object of modifiers. * * @export * @param {Date} day * @param {Object} [modifiersObj={}] * @return {Array} */ export function getModifiersForDay(day, modifiersObj = {}) { return Object.keys(modifiersObj).reduce((modifiers, modifierName) => { const value = modifiersObj[modifierName]; if (dayMatchesModifier(day, value)) { modifiers.push(modifierName); } return modifiers; }, []); } export default { dayMatchesModifier, getModifiersForDay };