Skip to content

Commit a873988

Browse files
juliajforestiCopilot
andcommitted
fix: current device logout logic to use useMutation to avoid error
Co-authored-by: Copilot <copilot@github.com>
1 parent 981af32 commit a873988

1 file changed

Lines changed: 40 additions & 19 deletions

File tree

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
import { GenericModal } from '@rocket.chat/ui-client';
2-
import { useSetModal, useToastMessageDispatch, useRoute, useRouteParameter } from '@rocket.chat/ui-contexts';
3-
import { useQueryClient } from '@tanstack/react-query';
4-
import { useCallback } from 'react';
2+
import {
3+
useSetModal,
4+
useToastMessageDispatch,
5+
useRoute,
6+
useRouteParameter,
7+
useEndpoint,
8+
useSessionDispatch,
9+
UserContext,
10+
} from '@rocket.chat/ui-contexts';
11+
import { useQueryClient, useMutation } from '@tanstack/react-query';
12+
import { useCallback, useContext } from 'react';
513
import { useTranslation } from 'react-i18next';
614

7-
import { useEndpointMutation } from './useEndpointMutation';
815
import { deviceManagementQueryKeys } from '../lib/queryKeys';
916

1017
export const useDeviceLogout = (sessionId: string, endpoint: '/v1/sessions/logout' | '/v1/sessions/logout.me'): (() => void) => {
@@ -13,29 +20,40 @@ export const useDeviceLogout = (sessionId: string, endpoint: '/v1/sessions/logou
1320
const dispatchToastMessage = useToastMessageDispatch();
1421
const deviceManagementRouter = useRoute('device-management');
1522
const routeId = useRouteParameter('id');
23+
const setForceLogout = useSessionDispatch('forceLogout');
24+
const { logout } = useContext(UserContext);
1625

1726
const queryClient = useQueryClient();
27+
const logoutEndpoint = useEndpoint('POST', endpoint);
1828

19-
const { mutateAsync: logoutDevice } = useEndpointMutation('POST', endpoint, {
20-
onSuccess: () => {
21-
queryClient.invalidateQueries({ queryKey: deviceManagementQueryKeys.all });
22-
isContextualBarOpen && handleCloseContextualBar();
23-
dispatchToastMessage({ type: 'success', message: t('Device_Logged_Out') });
24-
},
25-
onSettled: () => {
26-
setModal(null);
27-
},
28-
});
29+
const isOwnSessionLogout = endpoint === '/v1/sessions/logout.me';
2930

3031
const handleCloseContextualBar = useCallback(() => deviceManagementRouter.push({}), [deviceManagementRouter]);
31-
3232
const isContextualBarOpen = routeId === sessionId;
3333

34+
const { mutate: logoutDevice } = useMutation({
35+
mutationFn: logoutEndpoint,
36+
onSettled: () => {
37+
if (isOwnSessionLogout) {
38+
setModal(null);
39+
logout();
40+
} else {
41+
queryClient.invalidateQueries({ queryKey: deviceManagementQueryKeys.all });
42+
if (isContextualBarOpen) {
43+
handleCloseContextualBar();
44+
}
45+
dispatchToastMessage({ type: 'success', message: t('Device_Logged_Out') });
46+
setModal(null);
47+
}
48+
},
49+
throwOnError: false,
50+
});
51+
3452
return useCallback(() => {
3553
const closeModal = () => setModal(null);
3654

37-
const handleLogoutDevice = async () => {
38-
await logoutDevice({ sessionId });
55+
const handleLogoutDevice = () => {
56+
logoutDevice({ sessionId });
3957
};
4058

4159
setModal(
@@ -44,12 +62,15 @@ export const useDeviceLogout = (sessionId: string, endpoint: '/v1/sessions/logou
4462
variant='danger'
4563
confirmText={t('Logout_Device')}
4664
cancelText={t('Cancel')}
47-
onConfirm={handleLogoutDevice}
65+
onConfirm={() => {
66+
setForceLogout(true);
67+
handleLogoutDevice();
68+
}}
4869
onCancel={closeModal}
4970
onClose={closeModal}
5071
>
5172
{t('Device_Logout_Text')}
5273
</GenericModal>,
5374
);
54-
}, [setModal, t, logoutDevice, sessionId]);
75+
}, [setModal, t, logoutDevice, sessionId, setForceLogout]);
5576
};

0 commit comments

Comments
 (0)