Files
medreport_mrb2b/packages/supabase/src/hooks/use-sign-in-with-email-password.ts

43 lines
1.1 KiB
TypeScript

import type { SignInWithPasswordCredentials } from '@supabase/supabase-js';
import { useMutation } from '@tanstack/react-query';
import { medusaLoginOrRegister } from '../../../features/medusa-storefront/src/lib/data/customer';
import { useSupabase } from './use-supabase';
export function useSignInWithEmailPassword() {
const client = useSupabase();
const mutationKey = ['auth', 'sign-in-with-email-password'];
const mutationFn = async (credentials: SignInWithPasswordCredentials) => {
const response = await client.auth.signInWithPassword(credentials);
if (response.error) {
throw response.error.message;
}
const user = response.data?.user;
const identities = user?.identities ?? [];
if (identities.length === 0) {
throw new Error('User already registered');
}
if ('email' in credentials) {
try {
await medusaLoginOrRegister({
email: credentials.email,
password: credentials.password,
});
} catch (error) {
await client.auth.signOut();
throw error;
}
}
return response.data;
};
return useMutation({ mutationKey, mutationFn });
}