import React, { useState } from 'react'; interface WaitlistFormProps { isVisible: boolean; onClose: () => void; onBack: () => void; } interface FormData { firstName: string; lastName: string; email: string; companyName: string; companyType: string; gstRegistered: string; cin: string; panNumber: string; industry: string; goals: string; } const WaitlistForm: React.FC = ({ isVisible, onClose, onBack }) => { const [formData, setFormData] = useState({ firstName: '', lastName: '', email: '', companyName: '', companyType: '', gstRegistered: '', cin: '', panNumber: '', industry: '', goals: '' }); const [isLoading, setIsLoading] = useState(false); const [errors, setErrors] = useState>({}); const companyTypes = [ 'Pvt Ltd', 'LLP', 'Partnership', 'Sole Proprietorship', 'One Person Company (OPC)', 'Public Limited Company', 'Other' ]; const industries = [ 'Information Technology', 'Finance & Banking', 'E-commerce', 'Manufacturing', 'Healthcare', 'Education', 'Real Estate', 'Retail', 'Consulting', 'Marketing & Advertising', 'Food & Beverage', 'Transportation', 'Other' ]; const handleInputChange = (field: keyof FormData, value: string) => { setFormData(prev => { const newData = { ...prev, [field]: value }; // Clear conditional fields when company type changes if (field === 'companyType') { // Clear both fields when company type changes newData.cin = ''; newData.panNumber = ''; } // Clear conditional fields when GST registration changes to "yes" if (field === 'gstRegistered' && value === 'yes') { newData.cin = ''; newData.panNumber = ''; } return newData; }); // Clear error when user starts typing if (errors[field]) { setErrors(prev => ({ ...prev, [field]: '' })); } }; const validateForm = (): boolean => { const newErrors: Partial = {}; if (!formData.firstName.trim()) newErrors.firstName = 'First name is required'; if (!formData.lastName.trim()) newErrors.lastName = 'Last name is required'; if (!formData.email.trim()) { newErrors.email = 'Email is required'; } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) { newErrors.email = 'Please enter a valid email'; } if (!formData.companyName.trim()) newErrors.companyName = 'Company name is required'; if (!formData.companyType) newErrors.companyType = 'Company type is required'; if (!formData.gstRegistered) newErrors.gstRegistered = 'GST registration status is required'; // Conditional validation - only when GST is NOT registered if (formData.gstRegistered === 'no') { if (['Pvt Ltd', 'LLP'].includes(formData.companyType)) { // For Private Limited and LLP - CIN is required only when GST is not registered if (!formData.cin.trim()) newErrors.cin = 'CIN is required for Private Limited and LLP companies'; } else if (['Partnership', 'Sole Proprietorship', 'One Person Company (OPC)', 'Other'].includes(formData.companyType)) { // For Partnership, Proprietorship, Solo/Individual - PAN is required only when GST is not registered if (!formData.panNumber.trim()) newErrors.panNumber = 'PAN Number is required for this company type'; } } if (!formData.industry) newErrors.industry = 'Industry is required'; if (!formData.goals.trim()) newErrors.goals = 'Please tell us about your goals'; setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) return; setIsLoading(true); // Simulate form submission await new Promise(resolve => setTimeout(resolve, 2000)); setIsLoading(false); console.log('Waitlist form submitted:', formData); // Handle success - maybe show success message or close form onClose(); }; if (!isVisible) return null; return (
{/* Close Button */} {/* Back Button */} {/* Form Container */}
{/* Header */}
Pennyzo Icon

Join Our Exclusive Waitlist

Complete your application to secure your spot

{/* Form */}
{/* Personal Information Section */}

Personal Information

{/* First Name */}
handleInputChange('firstName', e.target.value)} className={`w-full bg-deep-forest/50 border ${errors.firstName ? 'border-red-400' : 'border-luxury-gold/20'} rounded-lg px-4 py-3 text-cream placeholder-cream/40 focus:outline-none focus:ring-2 focus:ring-luxury-gold/50 focus:border-luxury-gold/50 transition-all duration-300 font-elegant-sans`} placeholder="Enter your first name" /> {errors.firstName && (

{errors.firstName}

)}
{/* Last Name */}
handleInputChange('lastName', e.target.value)} className={`w-full bg-deep-forest/50 border ${errors.lastName ? 'border-red-400' : 'border-luxury-gold/20'} rounded-lg px-4 py-3 text-cream placeholder-cream/40 focus:outline-none focus:ring-2 focus:ring-luxury-gold/50 focus:border-luxury-gold/50 transition-all duration-300 font-elegant-sans`} placeholder="Enter your last name" /> {errors.lastName && (

{errors.lastName}

)}
{/* Email */}
handleInputChange('email', e.target.value)} className={`w-full bg-deep-forest/50 border ${errors.email ? 'border-red-400' : 'border-luxury-gold/20'} rounded-lg px-4 py-3 text-cream placeholder-cream/40 focus:outline-none focus:ring-2 focus:ring-luxury-gold/50 focus:border-luxury-gold/50 transition-all duration-300 font-elegant-sans`} placeholder="Enter your email address" /> {errors.email && (

{errors.email}

)}
{/* Company Information Section */}

Company Information

{/* Company Name */}
handleInputChange('companyName', e.target.value)} className={`w-full bg-deep-forest/50 border ${errors.companyName ? 'border-red-400' : 'border-luxury-gold/20'} rounded-lg px-4 py-3 text-cream placeholder-cream/40 focus:outline-none focus:ring-2 focus:ring-luxury-gold/50 focus:border-luxury-gold/50 transition-all duration-300 font-elegant-sans`} placeholder="Enter your company name" /> {errors.companyName && (

{errors.companyName}

)}
{/* Company Type */}
{errors.companyType && (

{errors.companyType}

)}
{/* GST Registered */}
{errors.gstRegistered && (

{errors.gstRegistered}

)}
{/* Conditional CIN Field - shows when company type is Pvt Ltd or LLP AND GST is NOT registered */} {formData.gstRegistered === 'no' && ['Pvt Ltd', 'LLP'].includes(formData.companyType) && (
handleInputChange('cin', e.target.value.toUpperCase())} className={`w-full bg-deep-forest/50 border ${errors.cin ? 'border-red-400' : 'border-luxury-gold/20'} rounded-lg px-4 py-3 text-cream placeholder-cream/40 focus:outline-none focus:ring-2 focus:ring-luxury-gold/50 focus:border-luxury-gold/50 transition-all duration-300 font-elegant-sans`} placeholder="e.g., L12345MH2020PLC123456" maxLength={21} /> {errors.cin && (

{errors.cin}

)}

21-digit Corporate Identity Number (required when GST not registered)

)} {/* Conditional PAN Number Field - shows for other company types AND GST is NOT registered */} {formData.gstRegistered === 'no' && ['Partnership', 'Sole Proprietorship', 'One Person Company (OPC)', 'Other'].includes(formData.companyType) && (
handleInputChange('panNumber', e.target.value.toUpperCase())} className={`w-full bg-deep-forest/50 border ${errors.panNumber ? 'border-red-400' : 'border-luxury-gold/20'} rounded-lg px-4 py-3 text-cream placeholder-cream/40 focus:outline-none focus:ring-2 focus:ring-luxury-gold/50 focus:border-luxury-gold/50 transition-all duration-300 font-elegant-sans`} placeholder="e.g., ABCDE1234F" maxLength={10} /> {errors.panNumber && (

{errors.panNumber}

)}

10-digit Permanent Account Number (required when GST not registered)

)} {/* Industry */}
{errors.industry && (

{errors.industry}

)}
{/* Qualifying Question Section */}

Tell Us About Your Goals