import { useEffect, useMemo, type ReactNode } from "react"; import { useQueryClient } from "@tanstack/react-query"; import { useChangePassword } from "@/domain/auth/use-cases/use-change-password"; import { useLogin, useLogout, useSession } from "@/domain/auth/use-cases/use-login"; import { startQueryBroadcast } from "@/lib/query/setup-query-broadcast"; import { AuthContext, type AuthContextValue } from "@/providers/auth-context"; export function AuthProvider({ children }: { children: ReactNode }) { const queryClient = useQueryClient(); const sessionQuery = useSession(); const loginMutation = useLogin(); const logoutMutation = useLogout(); const changePasswordMutation = useChangePassword(); const userId = sessionQuery.data?.id; useEffect(() => { if (userId == null) { return; } startQueryBroadcast(queryClient, userId); }, [queryClient, userId]); const value = useMemo( () => ({ user: sessionQuery.data, isAuthenticated: Boolean(sessionQuery.data), isLoading: sessionQuery.isLoading, error: sessionQuery.error, login: (credentials) => loginMutation.mutate(credentials), logout: () => logoutMutation.mutate(), changePassword: (data) => changePasswordMutation.mutate(data), isLoggingIn: loginMutation.isPending, isLoggingOut: logoutMutation.isPending, isChangingPassword: changePasswordMutation.isPending, loginError: loginMutation.error, }), [ sessionQuery.data, sessionQuery.isLoading, sessionQuery.error, loginMutation, logoutMutation, changePasswordMutation, ], ); return {children}; }