import { useQueryClient, useMutation, MutationOptions, DefaultError, } from "@tanstack/react-query" import { useAuthApiClient } from "./useAuthApiClient" import type { CreateSessionRequest, CreateSessionResponse } from "../api" import { QUERY_KEYS } from "./constants" /** * This hook is not exposed for external consumers. For creating session they * should use `useSignIn` hook related to the authentication method. */ export function useCreateSession( mutationOptions: Omit< MutationOptions, "mutationFn" | "mutationKey" > = {}, ) { const queryClient = useQueryClient() const authApiClient = useAuthApiClient() const { onSuccess: customOnSuccess, ...restMutationOptions } = mutationOptions const { mutate, mutateAsync, ...rest } = useMutation({ mutationFn: (createSessionRequest: CreateSessionRequest) => authApiClient.createSession(createSessionRequest), onSuccess: (data, variables, context) => { // Since `getSession` query also has code in its query keys we can't set // query data for a specific query, because we don't know if the code was // used or not. Because of that we just reset all getSession queries queryClient.resetQueries({ queryKey: [QUERY_KEYS.SESSION] }) queryClient.resetQueries({ queryKey: [QUERY_KEYS.ACCOUNT, QUERY_KEYS.CURRENT], }) if (customOnSuccess) customOnSuccess(data, variables, context) }, ...restMutationOptions, }) return { createSession: mutate, createSessionAsync: mutateAsync, ...rest } }