Every stock movement that ever happened — GRNs in, sales out, and returns — in one
ledger. Shows everything by default; use the filters to narrow it down.
setDateFrom(e.target.value)} />
setDateTo(e.target.value)} />
{hasActiveFilters && (
)}
`${row.type}-${row.productId}-${row.reference}-${row.date}-${row.amount}`}
emptyMessage={hasActiveFilters ? "No movements match these filters." : "No stock movements recorded yet."}
renderMobileCard={(row) => (