import React, { useEffect, useRef } from 'react'; import { useInventoryStore } from '../store/inventoryStore'; import { formatItemName } from '../utils/itemUtils'; import ItemIcon from './ItemIcon'; import './AlertsPanel.css'; function AlertsPanel({ isOpen, onClose }) { const alerts = useInventoryStore((state) => state.alerts) || []; const panelRef = useRef(null); // Close on click outside useEffect(() => { if (!isOpen) return; const handleClickOutside = (e) => { if (panelRef.current && !panelRef.current.contains(e.target)) { // Check if the click was on the bell button (has alerts-bell class) if (e.target.closest('.alerts-bell')) return; onClose(); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, [isOpen, onClose]); // Close on Escape useEffect(() => { if (!isOpen) return; const handleEsc = (e) => { if (e.key === 'Escape') onClose(); }; document.addEventListener('keydown', handleEsc); return () => document.removeEventListener('keydown', handleEsc); }, [isOpen, onClose]); if (!isOpen) return null; return (

🔔 Low-Stock Alerts

{alerts.length} alert{alerts.length !== 1 ? 's' : ''}
{alerts.length > 0 ? (
{alerts.map((alert, idx) => { const itemName = alert.item || alert.name || alert.label || ''; const isTriggered = alert.triggered !== undefined ? alert.triggered : true; const current = alert.current ?? '?'; const threshold = alert.threshold || alert.min || '?'; return (
{isTriggered ? '🔴' : '🟢'}
{formatItemName(itemName)}
Stock: {current} Min: {threshold}
{isTriggered ? 'LOW' : 'OK'}
); })}
) : (
✅ All stock levels are OK
)}
); } export default AlertsPanel;