/** * @license * SPDX-License-Identifier: Apache-2.0 */ import React, { useState, ChangeEvent } from 'react'; import type { InitialInput } from '../lib/types'; import { getDocument, GlobalWorkerOptions } from 'pdfjs-dist'; import mammoth from 'mammoth'; // Set workerSrc for pdf.js. This is crucial for it to work. GlobalWorkerOptions.workerSrc = 'pdfjs-dist/build/pdf.worker.min.js'; interface InitialInputFormProps { onSubmit: (formData: InitialInput) => void; onClear: () => void; disabled: boolean; isLoading: boolean; } const initialFormState: InitialInput = { fullName: '', jobTitle: '', careerGoal: '', jobDescription: '', uploadedResumeContent: '', yearsOfExperience: '2-4 Years', keySkills: '', previousRoles: '', education: '', }; export default function InitialInputForm({ onSubmit, onClear, disabled, isLoading }: InitialInputFormProps) { const [formData, setFormData] = useState(initialFormState); const [selectedFileName, setSelectedFileName] = useState(''); const [fileError, setFileError] = useState(null); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleFileChange = async (e: ChangeEvent) => { const file = e.target.files?.[0]; setFileError(null); setSelectedFileName(''); setFormData(prev => ({ ...prev, uploadedResumeContent: '' })); if (file) { setSelectedFileName(file.name); try { let text = ''; if (file.name.toLowerCase().endsWith('.txt')) { text = await file.text(); } else if (file.name.toLowerCase().endsWith('.pdf')) { const arrayBuffer = await file.arrayBuffer(); const pdf = await getDocument({ data: arrayBuffer }).promise; let pdfText = ''; for (let i = 1; i <= pdf.numPages; i++) { const page = await pdf.getPage(i); const textContent = await page.getTextContent(); pdfText += textContent.items.map((item: any) => item.str).join(' ') + '\n'; } text = pdfText; } else if (file.name.toLowerCase().endsWith('.docx')) { const arrayBuffer = await file.arrayBuffer(); const result = await mammoth.extractRawText({ arrayBuffer }); text = result.value; } else { setFileError("Unsupported file type. Please use .txt, .pdf, or .docx."); return; } setFormData(prev => ({ ...prev, uploadedResumeContent: text })); } catch (error) { setFileError(`Error processing file: ${error instanceof Error ? error.message : "Unknown error"}.`); } } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (fileError) { alert(`Cannot submit: Please resolve the file error first. ${fileError}`); return; } onSubmit(formData); }; const handleClear = () => { setFormData(initialFormState); setSelectedFileName(''); setFileError(null); const fileInput = document.getElementById('resumeUpload') as HTMLInputElement; if (fileInput) fileInput.value = ''; onClear(); }; return (

Initial Setup

{/* Form groups for all inputs */}