import moment from 'moment'; /** * Finds the difference in time in minutes * @param lastActive given time e.g. "2021-04-08T19:07:09.361300983Z" * @returns diff in minutes */ const _diffInMinutes = (lastActive: string | undefined) => { if (!lastActive) { return undefined; } return moment().diff(moment(lastActive), 'minutes'); }; /** * Formats the last activity status. * - "Active now" (≤ 5 minutes) * - "Seen X minutes ago" (5 > x ≥ 59 minutes) * - "Seen X hours ago" (x = [1, 2]) * - "Offline" * @param lastActive given time e.g. "2021-04-08T19:07:09.361300983Z" * @returns */ export const formatLastSeenText = (lastActive: string | undefined) => { const diff = _diffInMinutes(lastActive); if (!diff) { return 'Offline'; } if (diff <= 5) { return 'Active now'; } if (diff <= 59) { return `Seen ${diff} minutes ago`; } if (diff <= 180) { const hours = Math.floor(diff / 60); return `Seen ${hours} hours ago`; } return 'Offline'; }; /** * Checks if a lastActive timestamp is considered Online or not. * * A user is online if last active is ≤ 15 minutes. * * @param lastActive given time e.g. "2021-04-08T19:07:09.361300983Z" * @returns True if active */ export const isOnline = (lastActive: string | undefined) => { if (!lastActive) { return false; } const diff = _diffInMinutes(lastActive); if (!diff) { return false; } return diff <= 15; };