mattermost-mobile/app/actions/websocket/teams.ts
2022-01-28 15:53:55 -03:00

52 lines
1.9 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {DeviceEventEmitter} from 'react-native';
import {removeUserFromTeam} from '@actions/local/team';
import {fetchAllTeams, handleTeamChange} from '@actions/remote/team';
import {updateUsersNoLongerVisible} from '@actions/remote/user';
import Events from '@constants/events';
import DatabaseManager from '@database/manager';
import {queryActiveServer} from '@queries/app/servers';
import {queryCurrentTeamId} from '@queries/servers/system';
import {queryLastTeam} from '@queries/servers/team';
import {queryCurrentUser} from '@queries/servers/user';
import {dismissAllModals, popToRoot} from '@screens/navigation';
export async function handleLeaveTeamEvent(serverUrl: string, msg: WebSocketMessage) {
const database = DatabaseManager.serverDatabases[serverUrl];
if (!database) {
return;
}
const currentTeamId = await queryCurrentTeamId(database.database);
const user = await queryCurrentUser(database.database);
if (!user) {
return;
}
if (user.id === msg.data.user_id) {
await removeUserFromTeam(serverUrl, msg.data.team_id);
fetchAllTeams(serverUrl);
if (user.isGuest) {
updateUsersNoLongerVisible(serverUrl);
}
if (currentTeamId === msg.data.team_id) {
const currentServer = await queryActiveServer(DatabaseManager.appDatabase!.database);
if (currentServer?.url === serverUrl) {
DeviceEventEmitter.emit(Events.LEAVE_TEAM);
await dismissAllModals();
await popToRoot();
}
const teamToJumpTo = await queryLastTeam(database.database);
if (teamToJumpTo) {
handleTeamChange(serverUrl, teamToJumpTo);
} // TODO else jump to "join a team" screen
}
}
}