From 5e39cc0ba5a9d54d482b39fedc116aaf27feca89 Mon Sep 17 00:00:00 2001 From: Gerzon Z Date: Fri, 18 Feb 2022 22:31:38 -0400 Subject: [PATCH] Chore: Migrate getUsersPresence to TS (#3717) * migrate getUsersPresence to ts * use sdk and remove this context from getUsersPresence --- ...etUsersPresence.js => getUsersPresence.ts} | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) rename app/lib/methods/{getUsersPresence.js => getUsersPresence.ts} (68%) diff --git a/app/lib/methods/getUsersPresence.js b/app/lib/methods/getUsersPresence.ts similarity index 68% rename from app/lib/methods/getUsersPresence.js rename to app/lib/methods/getUsersPresence.ts index f596e527..afc885ca 100644 --- a/app/lib/methods/getUsersPresence.js +++ b/app/lib/methods/getUsersPresence.ts @@ -1,14 +1,17 @@ import { InteractionManager } from 'react-native'; import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord'; +import { IActiveUsers } from '../../reducers/activeUsers'; import { compareServerVersion } from '../utils'; import { store as reduxStore } from '../auxStore'; import { setActiveUsers } from '../../actions/activeUsers'; import { setUser } from '../../actions/login'; import database from '../database'; +import { IRocketChat, IUser } from '../../definitions'; +import sdk from '../rocketchat/services/sdk'; -export function subscribeUsersPresence() { - const serverVersion = reduxStore.getState().server.version; +export function subscribeUsersPresence(this: IRocketChat) { + const serverVersion = reduxStore.getState().server.version as string; // if server is lower than 1.1.0 if (compareServerVersion(serverVersion, 'lowerThan', '1.1.0')) { @@ -17,22 +20,22 @@ export function subscribeUsersPresence() { this.activeUsersSubTimeout = false; } this.activeUsersSubTimeout = setTimeout(() => { - this.sdk.subscribe('activeUsers'); + sdk.subscribe('activeUsers'); }, 5000); } else if (compareServerVersion(serverVersion, 'lowerThan', '4.1.0')) { - this.sdk.subscribe('stream-notify-logged', 'user-status'); + sdk.subscribe('stream-notify-logged', 'user-status'); } // RC 0.49.1 - this.sdk.subscribe('stream-notify-logged', 'updateAvatar'); + sdk.subscribe('stream-notify-logged', 'updateAvatar'); // RC 0.58.0 - this.sdk.subscribe('stream-notify-logged', 'Users:NameChanged'); + sdk.subscribe('stream-notify-logged', 'Users:NameChanged'); } -let ids = []; +let ids: string[] = []; export default async function getUsersPresence() { - const serverVersion = reduxStore.getState().server.version; + const serverVersion = reduxStore.getState().server.version as string; const { user: loggedUser } = reduxStore.getState().login; // if server is greather than or equal 1.1.0 @@ -51,17 +54,17 @@ export default async function getUsersPresence() { try { // RC 1.1.0 - const result = await this.sdk.get('users.presence', params); + const result = (await sdk.get('users.presence' as any, params as any)) as any; if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '4.1.0')) { - this.sdk.subscribeRaw('stream-user-presence', ['', { added: ids }]); + sdk.subscribeRaw('stream-user-presence', ['', { added: ids }]); } if (result.success) { const { users } = result; - const activeUsers = ids.reduce((ret, id) => { - const user = users.find(u => u._id === id) ?? { _id: id, status: 'offline' }; + const activeUsers = ids.reduce((ret: IActiveUsers, id) => { + const user = users.find((u: IUser) => u._id === id) ?? { _id: id, status: 'offline' }; const { _id, status, statusText } = user; if (loggedUser && loggedUser.id === _id) { @@ -78,17 +81,17 @@ export default async function getUsersPresence() { const db = database.active; const userCollection = db.get('users'); - users.forEach(async user => { + users.forEach(async (user: IUser) => { try { const userRecord = await userCollection.find(user._id); - await db.action(async () => { + await db.write(async () => { await userRecord.update(u => { Object.assign(u, user); }); }); } catch (e) { // User not found - await db.action(async () => { + await db.write(async () => { await userCollection.create(u => { u._raw = sanitizedRaw({ id: user._id }, userCollection.schema); Object.assign(u, user); @@ -103,11 +106,11 @@ export default async function getUsersPresence() { } } -let usersTimer = null; -export function getUserPresence(uid) { +let usersTimer: number | null = null; +export function getUserPresence(uid: string) { if (!usersTimer) { usersTimer = setTimeout(() => { - getUsersPresence.call(this); + getUsersPresence(); usersTimer = null; }, 2000); }