T.ME/BIBIL_0DAY
CasperSecurity


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.ca/public_html/src/hooks/useRegistrationForm.ts
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,
  };
}; 

CasperSecurity Mini