import React, { useState } from 'react'; import type { NewPerson } from '../types'; interface AddPersonFormProps { onSubmit: (person: NewPerson) => void; onCancel: () => void; } const AddPersonForm: React.FC = ({ onSubmit, onCancel }) => { const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); const [linkedinUrl, setLinkedinUrl] = useState(''); const [error, setError] = useState(''); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!firstName || !lastName || !linkedinUrl) { setError('All fields are required.'); return; } // Basic URL validation try { new URL(linkedinUrl); } catch (_) { setError('Please enter a valid LinkedIn URL.'); return; } setError(''); onSubmit({ firstName, lastName, linkedinUrl }); }; return (
{error &&
{error}
}
setFirstName(e.target.value)} className="appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-white" required />
setLastName(e.target.value)} className="appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-white" required />
setLinkedinUrl(e.target.value)} placeholder="https://www.linkedin.com/in/..." className="appearance-none block w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-white" required />
); }; export default AddPersonForm;