UNPKG

@shopify/polaris

Version:

Shopify’s product component library

150 lines (130 loc) 3.11 kB
var WEEK_LENGTH = 7; function getWeeksForMonth(month, year, weekStartsOn = 0) { var firstOfMonth = new Date(year, month, 1); var firstDayOfWeek = firstOfMonth.getDay(); var weeks = [[]]; var currentWeek = weeks[0]; var currentDate = firstOfMonth; var orderedWeekday = getOrderedWeekdays(weekStartsOn); for (var i = 0; i < orderedWeekday.indexOf(firstDayOfWeek); i++) { currentWeek.push(null); } while (currentDate.getMonth() === month) { if (currentWeek.length === WEEK_LENGTH) { currentWeek = []; weeks.push(currentWeek); } currentWeek.push(currentDate); currentDate = new Date(year, month, currentDate.getDate() + 1); } while (currentWeek.length < 7) { currentWeek.push(null); } return weeks; } function dateIsInRange(day, range) { if (day == null) { return false; } var { start, end } = range; return Boolean(start && day > start && end && day < end); } function dateIsSelected(day, range) { if (day == null) { return false; } var { start, end } = range; return Boolean(start && isSameDay(start, day) || end && isSameDay(end, day)); } function isSameDay(day1, day2) { return day1.getDate() === day2.getDate() && day1.getMonth() === day2.getMonth() && day1.getFullYear() === day2.getFullYear(); } function getNewRange(range, selected) { if (range == null) { return { start: selected, end: selected }; } var { start, end } = range; if (end && (isDateAfter(start, end) || isDateBefore(start, end))) { return { start: selected, end: selected }; } if (start) { if (isDateBefore(selected, start)) { return { start: selected, end: selected }; } return { start, end: selected }; } if (end) { if (isDateBefore(selected, end)) { return { start: selected, end }; } return { start: start || end, end: selected }; } return { start: selected, end: selected }; } function getNextDisplayMonth(month) { if (month === 11) { return 0; } return month + 1; } function getNextDisplayYear(month, year) { if (month === 11) { return year + 1; } return year; } function getPreviousDisplayMonth(month) { if (month === 0) { return 11; } return month - 1; } function getPreviousDisplayYear(month, year) { if (month === 0) { return year - 1; } return year; } function isDateAfter(date, dateToCompare) { return date.getTime() > dateToCompare.getTime(); } function isDateBefore(date, dateToCompare) { return date.getTime() < dateToCompare.getTime(); } var WEEKDAYS = [0, 1, 2, 3, 4, 5, 6]; function getOrderedWeekdays(weekStartsOn) { var weekDays = [...WEEKDAYS]; var restOfDays = weekDays.splice(weekStartsOn); return [...restOfDays, ...weekDays]; } export { dateIsInRange, dateIsSelected, getNewRange, getNextDisplayMonth, getNextDisplayYear, getOrderedWeekdays, getPreviousDisplayMonth, getPreviousDisplayYear, getWeeksForMonth, isDateAfter, isDateBefore, isSameDay };