"use client"; import React, { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { useTranslations } from "next-intl"; import { FormField } from "@/components/auth/form-field"; import { IdentityFormProps, JournalistRegistrationData, PersonnelRegistrationData, GeneralRegistrationData, UserCategory, journalistRegistrationSchema, personnelRegistrationSchema, generalRegistrationSchema } from "@/types/registration"; import { useUserDataValidation } from "@/hooks/use-registration"; import { ASSOCIATIONS } from "@/lib/registration-utils"; export const IdentityForm: React.FC = ({ category, onSuccess, onError, className, }) => { const t = useTranslations("LandingPage"); const { validateJournalistData, validatePersonnelData, loading: validationLoading } = useUserDataValidation(); const [memberIdentity, setMemberIdentity] = useState(""); const [memberIdentityError, setMemberIdentityError] = useState(""); // Determine which schema to use based on category const getSchema = () => { switch (category) { case "6": return journalistRegistrationSchema; case "7": return personnelRegistrationSchema; default: return generalRegistrationSchema; } }; const { register, handleSubmit, formState: { errors, isSubmitting }, setValue, watch, } = useForm({ resolver: zodResolver(getSchema()), mode: "onChange", }); const watchedEmail = watch("email"); const handleMemberIdentityChange = async (value: string) => { setMemberIdentity(value); setMemberIdentityError(""); if (!value.trim()) { return; } try { if (category === "6") { await validateJournalistData(value); setValue("journalistCertificate" as keyof JournalistRegistrationData, value); } else if (category === "7") { await validatePersonnelData(value); setValue("policeNumber" as keyof PersonnelRegistrationData, value); } } catch (error: any) { setMemberIdentityError(error.message || "Invalid identity number"); } }; const onSubmit = async (data: JournalistRegistrationData | PersonnelRegistrationData | GeneralRegistrationData) => { try { // Additional validation for member identity if ((category === "6" || category === "7") && !memberIdentity.trim()) { setMemberIdentityError("Identity number is required"); return; } if (memberIdentityError) { onError?.(memberIdentityError); return; } onSuccess?.(data); } catch (error: any) { onError?.(error.message || "Form submission failed"); } }; const renderJournalistFields = () => ( <>
{/* {errors.association && (
{errors.association.message}
)} */}
handleMemberIdentityChange(e.target.value)} /> {memberIdentityError && (

{memberIdentityError}

)}
); const renderPersonnelFields = () => (
handleMemberIdentityChange(e.target.value)} /> {memberIdentityError && (

{memberIdentityError}

)}
); return (
{/* Category-specific fields */} {category === "6" && renderJournalistFields()} {category === "7" && renderPersonnelFields()} {/* Email field - common for all categories */}
{errors.email && (

{errors.email.message}

)}
{/* Terms and conditions */}

{t("byRegis", { defaultValue: "By registering, you agree to our" })}
{" "} {t("terms", { defaultValue: "Terms of Service" })} {" "} {t("and", { defaultValue: "and" })}{" "} {t("privacy", { defaultValue: "Privacy Policy" })}

{/* Submit button */}
); };