import { useRef, useState } from 'react'; import { Card, CardContent } from '@/components/ui/card'; import { Label } from '@/components/ui/label'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Upload, X, FileText, Eye } from 'lucide-react'; import { RequestTemplate } from '@/hooks/useCreateRequestForm'; import { RichTextEditor } from '@/components/ui/rich-text-editor'; import { FilePreview } from '@/components/common/FilePreview/FilePreview'; interface AdminRequestDetailsStepProps { template: RequestTemplate; formData: any; setFormData: (data: any) => void; documents: File[]; setDocuments: (docs: File[]) => void; } export function AdminRequestDetailsStep({ template, formData, setFormData, documents, setDocuments }: AdminRequestDetailsStepProps) { const fileInputRef = useRef(null); const [previewFile, setPreviewFile] = useState<{ file: File; url: string } | null>(null); const handleFileChange = (e: React.ChangeEvent) => { if (e.target.files && e.target.files.length > 0) { setDocuments([...documents, ...Array.from(e.target.files)]); } }; const removeDocument = (index: number) => { const newDocs = [...documents]; newDocs.splice(index, 1); setDocuments(newDocs); }; const handlePreview = (file: File) => { const url = URL.createObjectURL(file); setPreviewFile({ file, url }); }; const closePreview = () => { if (previewFile?.url) { URL.revokeObjectURL(previewFile.url); } setPreviewFile(null); }; const canPreview = (file: File) => { return file.type.includes('image') || file.type.includes('pdf'); }; return (

{template.name}

{template.description}

Category: {template.category}
Priority: {template.priority}
SLA: {template.suggestedSLA} Hours
setFormData({ ...formData, title: e.target.value })} placeholder={`Request for ${template.name}`} className="border-gray-200" />

Explain what you need approval for, why it's needed, and any relevant details.

setFormData({ ...formData, description: html })} placeholder="Provide comprehensive details about your request..." className="min-h-[120px] text-base border-gray-200 bg-white shadow-sm" minHeight="120px" />
fileInputRef.current?.click()} >

Click to upload files

PDF, Excel, Images (Max 10MB)

{documents.length > 0 && (
{documents.map((file, index) => (

{file.name}

{(file.size / 1024 / 1024).toFixed(2)} MB

{canPreview(file) && ( )}
))}
)}
{previewFile && ( )}
); }