'use client' import { useCallback, useEffect, useState } from 'react' import { stock } from '@/lib/api/index' import type { StockBalanceResponse } from '@/types/api' import { Skeleton } from '@/components/ui/skeleton' import { Badge } from '@/components/ui/badge' const LOW_STOCK_THRESHOLD = 10 export function StockAlertsWidget() { const [alerts, setAlerts] = useState([]) const [loading, setLoading] = useState(true) const fetchData = useCallback(async () => { setLoading(true) try { const res = await stock.balances({ pageSize: 100, page: 1 }) const low = (res.items ?? []).filter(b => b.quantity <= LOW_STOCK_THRESHOLD) setAlerts(low) } catch { // silent } finally { setLoading(false) } }, []) useEffect(() => { fetchData() }, [fetchData]) if (loading) { return (
) } const outOfStock = alerts.filter(a => a.quantity === 0) const lowStock = alerts.filter(a => a.quantity > 0) return (
{alerts.length} alert{alerts.length !== 1 ? 's' : ''} {outOfStock.length > 0 && ( ({outOfStock.length} out of stock) )}
{alerts.length === 0 ? (

All stock levels are healthy

) : ( alerts.map(b => (
{b.itemName} {b.locationType}
{b.quantity === 0 ? 'Out of stock' : `${b.quantity} left`}
)) )}
) }