import { useCallback, useEffect, useState } from 'react' import { Link, useSearchParams } from 'react-router-dom' import { ApiHttpError } from '../../api/http' import { fetchStockStatus } from '../../api/inventory' import { INVENTORY_BOOK_BASE } from './inventoryPaths' /** * Stock Status — all items with status: ok/low_stock/out_of_stock. * Backend: GET /api/v1/administrator/inventory/stock-status */ export function InventoryStockStatusPage() { const [searchParams, setSearchParams] = useSearchParams() const [items, setItems] = useState[]>([]) const [counts, setCounts] = useState>({}) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const load = useCallback(() => { setLoading(true) fetchStockStatus(searchParams) .then((res) => { if (res && typeof res === 'object') { const o = res as Record setItems(Array.isArray(o.items) ? (o.items as Record[]) : []) setCounts((o.counts as Record) ?? {}) } setError(null) }) .catch((e: unknown) => { setError(e instanceof ApiHttpError ? e.message : 'Unable to load stock status.') }) .finally(() => setLoading(false)) }, [searchParams]) useEffect(() => { load() }, [load]) function onTypeFilter(v: string) { const next = new URLSearchParams(searchParams) if (v) next.set('type', v) else next.delete('type') setSearchParams(next) } const currentType = searchParams.get('type') ?? '' return (

Stock Status

Low Stock Reorder Suggestions Back to Items
{error ?
{error}
: null} {loading ? (

Loading…

) : ( <> {/* Summary Badges */}
OK: {counts.ok ?? 0} Low Stock: {counts.low_stock ?? 0} Out of Stock: {counts.out_of_stock ?? 0}
All Items
{items.length === 0 ? ( ) : ( items.map((item) => { const status = String(item.status ?? 'ok') const badgeClass = status === 'out_of_stock' ? 'bg-danger' : status === 'low_stock' ? 'bg-warning' : 'bg-success' const badgeLabel = status === 'out_of_stock' ? 'Out of Stock' : status === 'low_stock' ? 'Low Stock' : 'OK' return ( ) }) )}
Name Type Category Quantity Reorder Point Status Actions
No items found.
{String(item.name ?? '')} {String(item.type ?? '')} {String(item.category ?? '—')} {Number(item.quantity ?? 0).toLocaleString()} {item.reorder_point != null ? Number(item.reorder_point).toLocaleString() : '—'} {badgeLabel} Adjust
)}
) }