import { useResetRecoilState, useSetRecoilState } from 'recoil'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { MutationKeys, dataService, request } from 'librechat-data-provider'; 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, ): UseMutationResult => { const queryClient = useQueryClient(); const clearStates = useClearStates(); const resetDefaultPreset = useResetRecoilState(store.defaultPreset); const setQueriesEnabled = useSetRecoilState(store.queriesEnabled); return useMutation([MutationKeys.logoutUser], { mutationFn: () => dataService.logout(), ...(options || {}), onSuccess: (...args) => { setQueriesEnabled(false); resetDefaultPreset(); clearStates(); queryClient.removeQueries(); options?.onSuccess?.(...args); }, }); }; export const useLoginUserMutation = ( options?: t.MutationOptions, ): UseMutationResult => { const queryClient = useQueryClient(); const clearStates = useClearStates(); const resetDefaultPreset = useResetRecoilState(store.defaultPreset); const setQueriesEnabled = useSetRecoilState(store.queriesEnabled); return useMutation([MutationKeys.loginUser], { mutationFn: (payload: t.TLoginUser) => dataService.login(payload), ...(options || {}), onMutate: (vars) => { resetDefaultPreset(); clearStates(); queryClient.removeQueries(); options?.onMutate?.(vars); }, onSuccess: (...args) => { setQueriesEnabled(true); options?.onSuccess?.(...args); }, }); }; export const useRefreshTokenMutation = ( options?: t.MutationOptions, ): UseMutationResult => { const queryClient = useQueryClient(); return useMutation([MutationKeys.refreshToken], { mutationFn: () => request.refreshToken(), ...(options || {}), onMutate: (vars) => { queryClient.removeQueries(); options?.onMutate?.(vars); }, }); }; /* User */ export const useDeleteUserMutation = ( options?: t.MutationOptions, ): UseMutationResult => { 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); }, }); };