import React, { useState } from 'react'; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Card } from "@/components/ui/card"; import { Textarea } from "@/components/ui/textarea"; import { FileUp, Loader2, Search, HelpCircle, File } from "lucide-react"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { cn } from "@/lib/utils"; import CustomDialog from "@/components/CustomDialog"; // Interface for document types export interface DocumentType { name: string; description: string; } interface EmployeeDocumentSelectorProps { isOpen: boolean; onClose: () => void; documentTypes: DocumentType[]; onSelectAndUpload: (documentType: DocumentType, file: File, description: string) => void; isUploading: boolean; } const EmployeeDocumentSelector: React.FC = ({ isOpen, onClose, documentTypes, onSelectAndUpload, isUploading }) => { const [searchQuery, setSearchQuery] = useState(''); const [selectedType, setSelectedType] = useState(null); const [selectedFile, setSelectedFile] = useState(null); const [description, setDescription] = useState(''); const [step, setStep] = useState<'select-type' | 'select-file'>('select-type'); // Filter document types based on search const filteredDocTypes = documentTypes.filter(docType => docType.name.toLowerCase().includes(searchQuery.toLowerCase()) || docType.description.toLowerCase().includes(searchQuery.toLowerCase()) ); // Reset state when dialog closes const handleClose = () => { if (isUploading) return; setSelectedType(null); setSelectedFile(null); setDescription(''); setStep('select-type'); setSearchQuery(''); onClose(); }; // Handle document type selection const handleTypeSelect = (docType: DocumentType) => { setSelectedType(docType); setStep('select-file'); }; // Handle file selection const handleFileChange = (e: React.ChangeEvent) => { const files = e.target.files; if (files && files.length > 0) { setSelectedFile(files[0]); } }; // Handle description change const handleDescriptionChange = (e: React.ChangeEvent) => { setDescription(e.target.value); }; // Handle upload action const handleUpload = () => { if (selectedType && selectedFile) { onSelectAndUpload(selectedType, selectedFile, description); } }; // Go back to document type selection const handleBack = () => { setStep('select-type'); setSelectedFile(null); setDescription(''); }; return ( {step === 'select-type' ? (
setSearchQuery(e.target.value)} className="pl-8" />
{filteredDocTypes.length > 0 ? ( filteredDocTypes.map((docType) => ( handleTypeSelect(docType)} > {docType.name} {docType.description && ( )} {docType.description && ( {docType.description} )} )) ) : (
No matching document types found
)}
) : (

Selected Document Type:

{selectedType?.name}

{selectedType?.description && (

{selectedType.description}

)}
{selectedFile && (
{selectedFile.name} {(selectedFile.size / 1024).toFixed(1)} KB
)}