/** * Register Form Submit Logic * Handles form validation and sign-up submission */ import { useCallback } from "react"; import { AlertService } from "@umituz/react-native-design-system/molecules"; import { DEFAULT_PASSWORD_CONFIG } from "../../../domain/value-objects/AuthConfig"; import { validateRegisterForm, } from "../../utils/form/validation/formValidators"; import { errorsToFieldErrors } from "../../utils/form/validation/formValidation.utils"; import type { FieldErrors, RegisterFormTranslations } from "./useRegisterForm.types"; import { sanitizeEmail, sanitizeName } from "../../../infrastructure/utils/validation/sanitization"; interface RegisterFormFields { displayName: string; email: string; password: string; confirmPassword: string; } export function useRegisterFormSubmit( fields: RegisterFormFields, signUp: (email: string, password: string, displayName?: string) => Promise, setFieldErrors: React.Dispatch>, setLocalError: React.Dispatch>, clearFormErrors: () => void, getErrorMessage: (key: string) => string, handleAuthError: (error: unknown) => string, translations?: RegisterFormTranslations ) { const handleSignUp = useCallback(async () => { clearFormErrors(); // Sanitize once, use for both validation and sign-up const sanitizedEmail = sanitizeEmail(fields.email); const sanitizedName = sanitizeName(fields.displayName) || undefined; const validation = validateRegisterForm( { displayName: sanitizedName, email: sanitizedEmail, password: fields.password, confirmPassword: fields.confirmPassword, }, getErrorMessage, DEFAULT_PASSWORD_CONFIG ); if (!validation.isValid) { setFieldErrors(errorsToFieldErrors(validation.errors)); return; } try { await signUp(sanitizedEmail, fields.password, sanitizedName); if (translations) { AlertService.success(translations.successTitle, translations.signUpSuccess); } } catch (err: unknown) { setLocalError(handleAuthError(err)); } }, [fields, signUp, translations, handleAuthError, getErrorMessage, clearFormErrors, setFieldErrors, setLocalError]); return { handleSignUp }; }