![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/lavocat.ca/public_html/src/hooks/ |
import { useState, useEffect } from 'react';
import { useRouter } from 'next/router';
import type { FormData } from '../types';
const initialFormData: FormData = {
name: '',
email: '',
phone: '',
birthDate: '',
relationship: '',
message: '',
address: {
street: '',
city: '',
state: '',
postalCode: '',
country: '',
},
detaineeInfo: {
name: '',
facility: '',
inmateId: '',
incarcerationDate: '',
expectedReleaseDate: '',
},
preferredLanguage: 'en',
preferredContactMethod: 'email',
additionalContacts: [],
legalRepresentation: {
hasLawyer: false,
lawyerName: '',
lawyerContact: '',
},
documents: [],
};
export const useRegistrationForm = () => {
const router = useRouter();
const { locale } = router;
const [formData, setFormData] = useState<FormData>(initialFormData);
const [success, setSuccess] = useState(false);
const [error, setError] = useState('');
const [loading, setLoading] = useState(false);
const [isFrench, setIsFrench] = useState(locale === 'fr');
useEffect(() => {
setIsFrench(locale === 'fr');
setFormData(prev => ({
...prev,
preferredLanguage: locale as 'fr' | 'en'
}));
}, [locale]);
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setLoading(true);
setError('');
setSuccess(false);
try {
const formDataToSend = new FormData();
formDataToSend.append('name', formData.name);
formDataToSend.append('email', formData.email);
formDataToSend.append('phone', formData.phone);
formDataToSend.append('birthDate', formData.birthDate);
formDataToSend.append('relationship', formData.relationship);
formDataToSend.append('message', formData.message);
formDataToSend.append('preferredLanguage', formData.preferredLanguage);
formDataToSend.append('preferredContactMethod', formData.preferredContactMethod);
formDataToSend.append('address', JSON.stringify(formData.address));
formDataToSend.append('detaineeInfo', JSON.stringify(formData.detaineeInfo));
formDataToSend.append('additionalContacts', JSON.stringify(formData.additionalContacts));
formDataToSend.append('legalRepresentation', JSON.stringify(formData.legalRepresentation));
formDataToSend.append('documents', JSON.stringify(formData.documents));
formData.documents.forEach((doc, index) => {
if (doc.file) {
formDataToSend.append(`documents[${index}].file`, doc.file);
}
});
const res = await fetch('/api/register', {
method: 'POST',
body: formDataToSend,
});
const responseData = await res.json();
if (!res.ok) {
throw new Error(responseData.message || (isFrench ? 'Erreur inconnue' : 'Unknown error'));
}
setSuccess(true);
setFormData(initialFormData);
} catch (error) {
console.error('Form submission error:', error);
setError(error instanceof Error ? error.message : (isFrench ? 'Erreur inconnue' : 'Unknown error'));
} finally {
setLoading(false);
}
};
return {
formData,
setFormData,
success,
error,
loading,
isFrench,
handleSubmit,
};
};