import React, { useState, useRef, useEffect } from 'react'; import { Download, FileSpreadsheet, FileText, ChevronDown } from 'lucide-react'; import { ExportColumn, exportToSpreadsheet, exportToPdf } from '../../utils/exportUtils'; import { useAuth } from '../../auth/AuthProvider'; export interface ExportButtonProps { title: string; subtitle?: string; filename: string; columns: ExportColumn[]; data: T[]; label?: string; size?: 'sm' | 'md'; className?: string; } export function ExportButton({ title, subtitle, filename, columns, data, label = 'Export', size = 'md', className = '', }: ExportButtonProps) { const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); const { user, claims, tenantId } = useAuth(); const isDisabled = !data || data.length === 0; useEffect(() => { function handleClickOutside(event: MouseEvent) { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsOpen(false); } } if (isOpen) { document.addEventListener('mousedown', handleClickOutside); } return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [isOpen]); const handleExportSpreadsheet = () => { if (isDisabled) return; setIsOpen(false); exportToSpreadsheet({ title, subtitle, filename, columns, data, tenantName: (claims as any)?.tenant_name || (claims as any)?.tenant || `Tenant #${tenantId || 1}`, userEmail: user?.profile?.email || (claims as any)?.email || '', }); }; const handleExportPdf = () => { if (isDisabled) return; setIsOpen(false); exportToPdf({ title, subtitle, filename, columns, data, tenantName: (claims as any)?.tenant_name || (claims as any)?.tenant || `Tenant #${tenantId || 1}`, userEmail: user?.profile?.email || (claims as any)?.email || '', }); }; return (
{isOpen && !isDisabled && (
Export Format ({data.length} items)
)}
); }