UNPKG

@dialpad/dialtone

Version:

Dialpad's Dialtone design system monorepo

71 lines (70 loc) 2.06 kB
import { intervalToDuration, isToday, isYesterday, isThisWeek, isThisYear, format, formatDuration, formatDistance } from "date-fns"; import { capitalizeFirstLetter } from "./utils.js"; let dialtoneLocale; function _baseFormat(date, formatString) { _checkLocaleSet(); return format(date, formatString, { locale: dialtoneLocale }); } function _baseFormatDuration(duration, formatString) { _checkLocaleSet(); return formatDuration(duration, { locale: dialtoneLocale, format: formatString }); } function _baseFormatDistance(date, baseDate) { _checkLocaleSet(); return formatDistance(date, baseDate, { locale: dialtoneLocale }); } function _isLocaleSet() { return dialtoneLocale !== void 0; } function _checkLocaleSet() { if (!_isLocaleSet()) { throw new Error("Locale not set, please call setDateLocale(locale) and pass in a datefns locale object as the locale param before calling this function"); } } function setDateLocale(locale) { dialtoneLocale = locale; } function getDateMedium(date) { return _baseFormat(date, "MMMM d, y"); } function durationInHHMM(durationInSeconds) { if (durationInSeconds < 60) { return _baseFormatDistance(0, 29 * 1e3); } const duration = intervalToDuration({ start: 0, end: durationInSeconds * 1e3 }); return _baseFormatDuration(duration, ["hours", "minutes"]); } function _getRelativeDaysText(days) { const rtl = new Intl.RelativeTimeFormat(dialtoneLocale.code, { numeric: "auto" }); return capitalizeFirstLetter(rtl.formatToParts(days, "day")[0].value, dialtoneLocale.code); } function relativeDate(date) { if (isToday(date)) { return _getRelativeDaysText(0); } else if (isYesterday(date)) { return _getRelativeDaysText(-1); } else if (isThisWeek(date)) { return _baseFormat(date, "EEEE"); } else if (isThisYear(date)) { return _baseFormat(date, "EEEE, MMMM d"); } else { return _baseFormat(date, "MMMM d, y"); } } export { durationInHHMM, getDateMedium, relativeDate, setDateLocale }; //# sourceMappingURL=dates.js.map