import { getUnixTime, format, add, startOfWeek, addWeeks, startOfMonth, isMonday, isToday, setHours, setMinutes, setSeconds, } from 'date-fns'; import wootConstants from 'dashboard/constants/globals'; const SNOOZE_OPTIONS = wootConstants.SNOOZE_OPTIONS; export const findStartOfNextWeek = currentDate => { const startOfNextWeek = startOfWeek(addWeeks(currentDate, 1)); return isMonday(startOfNextWeek) ? startOfNextWeek : add(startOfNextWeek, { days: (8 - startOfNextWeek.getDay()) % 7, }); }; export const findStartOfNextMonth = currentDate => { const startOfNextMonth = startOfMonth(add(currentDate, { months: 1 })); return isMonday(startOfNextMonth) ? startOfNextMonth : add(startOfNextMonth, { days: (8 - startOfNextMonth.getDay()) % 7, }); }; export const findNextDay = currentDate => { return add(currentDate, { days: 1 }); }; export const setHoursToNine = date => { return setSeconds(setMinutes(setHours(date, 9), 0), 0); }; export const findSnoozeTime = (snoozeType, currentDate = new Date()) => { let parsedDate = null; if (snoozeType === SNOOZE_OPTIONS.AN_HOUR_FROM_NOW) { parsedDate = add(currentDate, { hours: 1 }); } else if (snoozeType === SNOOZE_OPTIONS.UNTIL_TOMORROW) { parsedDate = setHoursToNine(findNextDay(currentDate)); } else if (snoozeType === SNOOZE_OPTIONS.UNTIL_NEXT_WEEK) { parsedDate = setHoursToNine(findStartOfNextWeek(currentDate)); } else if (snoozeType === SNOOZE_OPTIONS.UNTIL_NEXT_MONTH) { parsedDate = setHoursToNine(findStartOfNextMonth(currentDate)); } return parsedDate ? getUnixTime(parsedDate) : null; }; export const snoozedReopenTime = snoozedUntil => { if (!snoozedUntil) { return null; } const date = new Date(snoozedUntil); if (isToday(date)) { return format(date, 'h.mmaaa'); } return snoozedUntil ? format(date, 'd MMM, h.mmaaa') : null; };