shoc-frontend-new/src/providers/auth-provider.tsx
2026-06-12 11:52:16 -03:00

37 lines
1.3 KiB
TypeScript

import { useMemo, type ReactNode } from "react";
import { useChangePassword } from "@/domain/auth/use-cases/use-change-password";
import { useLogin, useLogout, useSession } from "@/domain/auth/use-cases/use-login";
import { AuthContext, type AuthContextValue } from "@/providers/auth-context";
export function AuthProvider({ children }: { children: ReactNode }) {
const sessionQuery = useSession();
const loginMutation = useLogin();
const logoutMutation = useLogout();
const changePasswordMutation = useChangePassword();
const value = useMemo<AuthContextValue>(
() => ({
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 <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
}