UNPKG

@dialpad/dialtone

Version:

Dialpad's Dialtone design system monorepo

85 lines (84 loc) 3.57 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const dateFns = require("date-fns"); const datepicker_constants = require("./datepicker_constants.cjs"); const _parsedGetDate = (value) => value ? new Date(value) : /* @__PURE__ */ new Date(); const getWeekDays = (startDay, month, selectedDay) => { const startDate = _parsedGetDate(JSON.parse(JSON.stringify(startDay))); const dates = []; for (let i = 0; i < 7; i++) { const next = dateFns.addDays(startDate, i); const isNext = dateFns.getMonth(next) !== month; dates.push({ text: next.getDate(), value: next, currentMonth: !isNext, isFirstDayOfMonth: next.getDate() === 1 && !isNext, // will be selected if the date is the same as the selected day and is from the current month selected: selectedDay ? next.getDate() === selectedDay && !isNext : false }); } return dates; }; const isDateEqual = (date, dateToCompare) => { if (!date || !dateToCompare) { return false; } return dateFns.isEqual(date, dateToCompare); }; const getCalendarDays = (month, year, selectedDay) => { const weeks = []; const firstDate = _parsedGetDate(new Date(year, month)); const lastDate = _parsedGetDate(new Date(year, month + 1, 0)); const weekStartsOn = datepicker_constants.WEEK_START; const firstDateInCalendar = dateFns.startOfWeek(firstDate, { weekStartsOn }); const addDaysToWeek = (date) => { const days = getWeekDays(date, month, selectedDay); weeks.push({ days }); if (!weeks[weeks.length - 1].days.some( (day) => isDateEqual(day.value, lastDate) )) { const nextDate = dateFns.addDays(date, 7); addDaysToWeek(nextDate); } }; addDaysToWeek(firstDateInCalendar); return weeks; }; const getWeekDayNames = (locale, weekStart) => { const days = [1, 2, 3, 4, 5, 6, 7].map((day) => { return new Intl.DateTimeFormat(locale, { weekday: "short", timeZone: "UTC" }).format(/* @__PURE__ */ new Date(`2017-01-0${day}T00:00:00+00:00`)).slice(0, 2); }); const beforeWeekStart = days.slice(0, weekStart); const afterWeekStart = days.slice(weekStart + 1, days.length); return [days[weekStart]].concat(...afterWeekStart).concat(...beforeWeekStart); }; const formatMonth = (month, monthFormat, locale) => { return new Intl.DateTimeFormat(locale, { month: monthFormat }).format(new Date(2e3, month, 1)); }; const calculateNextFocusDate = (currentDate) => { const date = new Date(currentDate); const currentWeekday = dateFns.getDay(date); const nextMonthDate = dateFns.addMonths(date, 1); const nextMonthStart = dateFns.startOfMonth(nextMonthDate); const nextMonthStartWeekday = dateFns.getDay(nextMonthStart); const dayDifference = (currentWeekday - nextMonthStartWeekday + 7) % 7; const focusDate = dateFns.addDays(nextMonthStart, dayDifference); return dateFns.getDate(focusDate); }; const calculatePrevFocusDate = (currentDate) => { const date = new Date(currentDate); const currentWeekday = dateFns.getDay(date); const lastDayOfPrevMonth = dateFns.endOfMonth(dateFns.subMonths(date, 1)); let focusDate = lastDayOfPrevMonth; while (dateFns.getDay(focusDate) !== currentWeekday) { focusDate = dateFns.addDays(focusDate, -1); } return dateFns.getDate(focusDate); }; exports.calculateNextFocusDate = calculateNextFocusDate; exports.calculatePrevFocusDate = calculatePrevFocusDate; exports.formatMonth = formatMonth; exports.getCalendarDays = getCalendarDays; exports.getWeekDayNames = getWeekDayNames; //# sourceMappingURL=utils.cjs.map