2025-02-03 10:53:04 -05:00
|
|
|
import { useResetRecoilState, useSetRecoilState } from 'recoil';
|
2025-01-12 12:57:10 -05:00
|
|
|
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
2025-02-03 10:53:04 -05:00
|
|
|
import { MutationKeys, dataService, request } from 'librechat-data-provider';
|
2025-01-12 12:57:10 -05:00
|
|
|
import type { UseMutationResult } from '@tanstack/react-query';
|
|
|
|
|
import type * as t from 'librechat-data-provider';
|
|
|
|
|
import useClearStates from '~/hooks/Config/useClearStates';
|
|
|
|
|
import store from '~/store';
|
|
|
|
|
|
|
|
|
|
/* login/logout */
|
|
|
|
|
export const useLogoutUserMutation = (
|
|
|
|
|
options?: t.LogoutOptions,
|
2025-02-03 10:53:04 -05:00
|
|
|
): UseMutationResult<t.TLogoutResponse, unknown, undefined, unknown> => {
|
2025-01-12 12:57:10 -05:00
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
const clearStates = useClearStates();
|
|
|
|
|
const resetDefaultPreset = useResetRecoilState(store.defaultPreset);
|
2025-02-03 10:53:04 -05:00
|
|
|
const setQueriesEnabled = useSetRecoilState<boolean>(store.queriesEnabled);
|
2025-01-12 12:57:10 -05:00
|
|
|
|
|
|
|
|
return useMutation([MutationKeys.logoutUser], {
|
|
|
|
|
mutationFn: () => dataService.logout(),
|
|
|
|
|
...(options || {}),
|
|
|
|
|
onSuccess: (...args) => {
|
2025-02-03 10:53:04 -05:00
|
|
|
setQueriesEnabled(false);
|
2025-01-12 12:57:10 -05:00
|
|
|
resetDefaultPreset();
|
|
|
|
|
clearStates();
|
|
|
|
|
queryClient.removeQueries();
|
|
|
|
|
options?.onSuccess?.(...args);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2025-02-03 10:53:04 -05:00
|
|
|
export const useLoginUserMutation = (
|
|
|
|
|
options?: t.MutationOptions<t.TLoginResponse, t.TLoginUser, unknown, unknown>,
|
|
|
|
|
): UseMutationResult<t.TLoginResponse, unknown, t.TLoginUser, unknown> => {
|
2025-01-12 12:57:10 -05:00
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
const clearStates = useClearStates();
|
|
|
|
|
const resetDefaultPreset = useResetRecoilState(store.defaultPreset);
|
2025-02-03 10:53:04 -05:00
|
|
|
const setQueriesEnabled = useSetRecoilState<boolean>(store.queriesEnabled);
|
|
|
|
|
return useMutation([MutationKeys.loginUser], {
|
|
|
|
|
mutationFn: (payload: t.TLoginUser) => dataService.login(payload),
|
|
|
|
|
...(options || {}),
|
|
|
|
|
onMutate: (vars) => {
|
2025-01-12 12:57:10 -05:00
|
|
|
resetDefaultPreset();
|
|
|
|
|
clearStates();
|
|
|
|
|
queryClient.removeQueries();
|
2025-02-03 10:53:04 -05:00
|
|
|
options?.onMutate?.(vars);
|
|
|
|
|
},
|
|
|
|
|
onSuccess: (...args) => {
|
|
|
|
|
setQueriesEnabled(true);
|
|
|
|
|
options?.onSuccess?.(...args);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const useRefreshTokenMutation = (
|
|
|
|
|
options?: t.MutationOptions<t.TRefreshTokenResponse | undefined, undefined, unknown, unknown>,
|
|
|
|
|
): UseMutationResult<t.TRefreshTokenResponse | undefined, unknown, undefined, unknown> => {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
return useMutation([MutationKeys.refreshToken], {
|
|
|
|
|
mutationFn: () => request.refreshToken(),
|
|
|
|
|
...(options || {}),
|
|
|
|
|
onMutate: (vars) => {
|
|
|
|
|
queryClient.removeQueries();
|
|
|
|
|
options?.onMutate?.(vars);
|
2025-01-12 12:57:10 -05:00
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* User */
|
|
|
|
|
export const useDeleteUserMutation = (
|
|
|
|
|
options?: t.MutationOptions<unknown, undefined>,
|
|
|
|
|
): UseMutationResult<unknown, unknown, undefined, unknown> => {
|
|
|
|
|
const queryClient = useQueryClient();
|
|
|
|
|
const clearStates = useClearStates();
|
|
|
|
|
const resetDefaultPreset = useResetRecoilState(store.defaultPreset);
|
|
|
|
|
|
|
|
|
|
return useMutation([MutationKeys.deleteUser], {
|
|
|
|
|
mutationFn: () => dataService.deleteUser(),
|
|
|
|
|
...(options || {}),
|
|
|
|
|
onSuccess: (...args) => {
|
|
|
|
|
resetDefaultPreset();
|
|
|
|
|
clearStates();
|
|
|
|
|
queryClient.removeQueries();
|
|
|
|
|
options?.onSuccess?.(...args);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
};
|