import React, { useState } from 'react'; import { createPortal } from 'react-dom'; import { X, DollarSign, TrendingUp, TrendingDown, Download, Search, Filter } from 'lucide-react'; const FinancialSummaryModal = ({ isOpen, onClose, role, data }) => { const [searchTerm, setSearchTerm] = useState(''); const [sortConfig, setSortConfig] = useState({ key: 'date', direction: 'desc' }); // Close on Escape key React.useEffect(() => { const handleKeyDown = (e) => { if (e.key === 'Escape') onClose(); }; if (isOpen) { window.addEventListener('keydown', handleKeyDown); } return () => window.removeEventListener('keydown', handleKeyDown); }, [isOpen, onClose]); if (!isOpen || !data) return null; const formatCurrency = (amount) => { return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(amount); }; const handleSort = (key) => { let direction = 'asc'; if (sortConfig.key === key && sortConfig.direction === 'asc') { direction = 'desc'; } setSortConfig({ key, direction }); }; // Filter and sort data const filteredData = (data.items || []).filter(item => item.description?.toLowerCase().includes(searchTerm.toLowerCase()) || item.project?.toLowerCase().includes(searchTerm.toLowerCase()) ); const sortedData = [...filteredData].sort((a, b) => { if (a[sortConfig.key] < b[sortConfig.key]) { return sortConfig.direction === 'asc' ? -1 : 1; } if (a[sortConfig.key] > b[sortConfig.key]) { return sortConfig.direction === 'asc' ? 1 : -1; } return 0; }); return createPortal(