43 lines
1.1 KiB
TypeScript
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 });
|
|
}
|