import React, { useState, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { __ } from '@wordpress/i18n'; import { apiService } from '../../../../../services/api.service'; import { AppInput } from '../../../../../shared/form'; import { ErrorMessage } from '../../../../../shared/error-message'; import { SignupRequestDto } from '../../../../../services/api.service.types'; export interface RegisterStep3FormData { email: string; password: string; confirmPassword: string; } export interface RegisterStep3Props { userType: 'Partner' | 'Location'; language: string; formData: { businessName?: string; ownerName?: string; category?: string; partnerFirstName?: string; partnerPhone?: string; }; onBack: () => void; } export function RegisterStep3({ userType, language, formData, onBack }: RegisterStep3Props): JSX.Element { const [isSubmitting, setIsSubmitting] = useState(false); const [submitError, setSubmitError] = useState(null); const isPartner = userType === 'Partner'; const { register, handleSubmit, watch, trigger, formState: { errors }, } = useForm({ mode: 'onBlur', defaultValues: { email: '', password: '', confirmPassword: '', }, }); const password = watch('password'); const confirmPassword = watch('confirmPassword'); // Re-validate confirm password when password changes, but only if confirmPassword has a value useEffect(() => { if (password && confirmPassword) { trigger('confirmPassword'); } }, [password, trigger, confirmPassword]); const onSubmitForm = async (data: RegisterStep3FormData): Promise => { setIsSubmitting(true); setSubmitError(null); const payload: SignupRequestDto = { user_type: userType, business_name: formData.businessName || '', owner_name: formData.ownerName || '', category: formData.category || '', email: data.email, password: data.password, confirm_password: data.confirmPassword, language, }; if (userType === 'Partner') { payload.partner_first_name = formData.partnerFirstName || ''; payload.partner_phone = formData.partnerPhone || ''; } try { await apiService.signup(payload); // On success, reload the page (same as original JS behavior) window.location.reload(); } catch (err) { const errorMsg = apiService.getErrorMessage(err); setSubmitError(errorMsg); setIsSubmitting(false); } }; return (

{__('Sign up', 'timetailor-salon-booking')}

{isPartner ? __('Create an account to finish setting up the booking system. You can invite your client later.', 'timetailor-salon-booking') : __('This account connects your WordPress site to the booking system.', 'timetailor-salon-booking')}

value === password || __('Passwords do not match', 'timetailor-salon-booking'), })} error={errors.confirmPassword} /> {submitError && (
)}

{__('By clicking Sign up, you agree to our', 'timetailor-salon-booking')}{' '} {__('Terms & Conditions', 'timetailor-salon-booking')} {' '} {__('and', 'timetailor-salon-booking')}{' '} {__('Privacy Policy', 'timetailor-salon-booking')} .

); }