// useLogin.ts import { useState, useCallback } from 'react'; import { ApiError, APIResponse, apiClient, isApiResponse, isApiError, OTPTypes, } from '..'; export interface SendEmailCodeRequest { email: string; kind: number; } interface UseSendEmailCode { isLoading: boolean; error: ApiError | null; data: APIResponse | null; sendEmailCode: (email: string, kind: number) => Promise; } export const useSendEmailCode = (): UseSendEmailCode => { const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const [data, setData] = useState(null); const sendEmailCode = useCallback( (email: string, kind: OTPTypes): Promise => { const payload: SendEmailCodeRequest = { email, kind }; setIsLoading(true); setError(null); setData(null); return apiClient() .post('v1/auth/send-email-code', payload) .then(res => { if (isApiResponse(res)) { setData(res); } else if (isApiError(res)) { setError(res); } else { setError({ message: 'Received unknown response structure.' }); } }) .catch(() => setError({ message: 'Network or unexpected error' })) .finally(() => setIsLoading(false)); }, [], ); return { isLoading, error, data, sendEmailCode }; };