@redocly/theme
Version:
Shared UI components lib
39 lines • 1.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useTimeAgo = useTimeAgo;
const react_1 = require("react");
const hooks_1 = require("../../core/hooks");
const timeUnits = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];
const timeUnitConversions = [
60, // 60 seconds in 1 min
60, // 60 mins in 1 hour
24, // 24 hours in 1 day
7, // 7 days in 1 week
365 / 7 / 12, // 4.345238095238096 weeks in 1 month
12, // 12 months in 1 year
];
function useTimeAgo() {
const { useTranslate } = (0, hooks_1.useThemeHooks)();
const { translate } = useTranslate();
const format = (0, react_1.useCallback)((date) => {
let timeUnitIndex = 0;
let elapsedTime = (Date.now() - date.getTime()) / 1000;
for (; elapsedTime >= timeUnitConversions[timeUnitIndex] &&
timeUnitIndex < timeUnitConversions.length; timeUnitIndex++) {
elapsedTime /= timeUnitConversions[timeUnitIndex];
}
elapsedTime = Math.floor(elapsedTime);
if (timeUnitIndex === 0)
return translate('time.justNow', 'just now');
const timeUnit = timeUnits[timeUnitIndex];
const suffix = elapsedTime > 1 ? 's' : '';
const translationKey = `time.past.${timeUnit}${suffix}`;
return translate(translationKey, {
defaultValue: `${elapsedTime} ${timeUnit}${suffix} ago`,
count: elapsedTime,
replace: { value: elapsedTime },
});
}, [translate]);
return { format };
}
//# sourceMappingURL=use-time-ago.js.map