mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-02 12:08:01 +00:00
98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
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;
|
|
};
|
|
|
|
export const snoozedReopenTimeToTimestamp = snoozedUntil => {
|
|
return snoozedUntil ? getUnixTime(new Date(snoozedUntil)) : null;
|
|
};
|
|
export const shortenSnoozeTime = snoozedUntil => {
|
|
if (!snoozedUntil) {
|
|
return null;
|
|
}
|
|
const unitMap = {
|
|
minutes: 'm',
|
|
minute: 'm',
|
|
hours: 'h',
|
|
hour: 'h',
|
|
days: 'd',
|
|
day: 'd',
|
|
months: 'mo',
|
|
month: 'mo',
|
|
years: 'y',
|
|
year: 'y',
|
|
};
|
|
const shortenTime = snoozedUntil
|
|
.replace(/^in\s+/i, '')
|
|
.replace(
|
|
/\s(minute|hour|day|month|year)s?\b/gi,
|
|
(match, unit) => unitMap[unit.toLowerCase()] || match
|
|
);
|
|
|
|
return shortenTime;
|
|
};
|