aboutsummaryrefslogtreecommitdiff
path: root/src/utils/messages.ts
diff options
context:
space:
mode:
authorIvan Chen <ivan@tagg.id>2021-04-08 16:10:14 -0400
committerIvan Chen <ivan@tagg.id>2021-04-08 16:10:14 -0400
commitbb16e95e15f6ea9b8941cae764570bdf7c0fdb59 (patch)
treebed0f4c3f0aabb9a163a1933236e2ff31482eec0 /src/utils/messages.ts
parent4d5e79c7bc6e5112684506047954a47f3a97e891 (diff)
created util functions, updated isOnline
Diffstat (limited to 'src/utils/messages.ts')
-rw-r--r--src/utils/messages.ts59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/utils/messages.ts b/src/utils/messages.ts
new file mode 100644
index 00000000..ae8e7cec
--- /dev/null
+++ b/src/utils/messages.ts
@@ -0,0 +1,59 @@
+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;
+};