diff --git a/web/src/components/modals/AuditFlow.tsx b/web/src/components/modals/AuditFlow.tsx index 552accb..2db097d 100644 --- a/web/src/components/modals/AuditFlow.tsx +++ b/web/src/components/modals/AuditFlow.tsx @@ -39,7 +39,7 @@ export function AuditFlow({ .filter((i) => i.status === "active") .sort((a, b) => helpers.daysSinceCheck(b) - helpers.daysSinceCheck(a)); - const [itemId, setItemId] = useState(initialItem?.id ?? overdueFirst[0]?.id ?? ""); + const [itemId, setItemId] = useState(initialItem?.id ?? ""); const [date, setDate] = useState(TODAY_STR); const [confirmedBy, setConfirmedBy] = useState<"asset" | "SKU" | "visual">("asset"); @@ -82,17 +82,17 @@ export function AuditFlow({ } }; - if (!item) return null; const auditMode = cfg?.auditMode ?? "weigh"; const ml = AUDIT_MODE_LABELS[auditMode] ?? AUDIT_MODE_LABELS.weigh!; - const last = helpers.lastAudit(item); - const prevValue = - item.kind === "discrete" + const last = item ? helpers.lastAudit(item) : null; + const prevValue = item + ? item.kind === "discrete" ? item.countLastAudit ?? item.countOriginal : last ? last.value - : item.weight; + : item.weight + : 0; const delta = Number(value) - prevValue; @@ -108,7 +108,7 @@ export function AuditFlow({ boxShadow: "var(--shadow-lg)", }} > - +
-
-
-
-
- {item.name} -
-
- {item.assetId} · {item.type} · {item.kind} · cadence every {cfg?.cadenceDays}d -
-
-
-
LAST CHECKED
-
- {last ? `${helpers.daysSinceCheck(item)}d ago` : "Never"} -
-
+ {!item ? ( +
+ Scan an asset ID to continue.
-
- {ml.desc} -
-
- -
- - setValue(e.target.value)} - /> - - - setDate(e.target.value)} /> - - {auditMode === "presence" && ( - - - - )} -
- -
-
-
Was
-
- {prevValue} {cfg?.unit} -
-
-
-
Now
-
- {value} {cfg?.unit} -
-
-
-
Δ since last
+ ) : ( + <>
- {delta.toFixed(item.kind === "discrete" ? 0 : 2)} {cfg?.unit} +
+
+
+ {item.name} +
+
+ {item.assetId} · {item.type} · {item.kind} · cadence every {cfg?.cadenceDays}d +
+
+
+
LAST CHECKED
+
+ {last ? `${helpers.daysSinceCheck(item)}d ago` : "Never"} +
+
+
+
+ {ml.desc} +
-
-
+ +
+ + setValue(e.target.value)} + /> + + + setDate(e.target.value)} /> + + {auditMode === "presence" && ( + + + + )} +
+ +
+
+
Was
+
+ {prevValue} {cfg?.unit} +
+
+
+
Now
+
+ {value} {cfg?.unit} +
+
+
+
Δ since last
+
+ {delta.toFixed(item.kind === "discrete" ? 0 : 2)} {cfg?.unit} +
+
+
+ + )} {error && (
{error}
@@ -234,14 +242,14 @@ export function AuditFlow({
- Next audit due in {cfg?.cadenceDays}d + {item ? `Next audit due in ${cfg?.cadenceDays}d` : ""}
Cancel audit.mutate()} > {audit.isPending ? "Saving…" : "Save audit"} diff --git a/web/src/components/modals/ConsumeFlow.tsx b/web/src/components/modals/ConsumeFlow.tsx index 29f4cfd..5961048 100644 --- a/web/src/components/modals/ConsumeFlow.tsx +++ b/web/src/components/modals/ConsumeFlow.tsx @@ -22,7 +22,7 @@ export function ConsumeFlow({ const { toast } = useToast(); const allItems = enrichItems(data); const active = allItems.filter((i) => i.status === "active"); - const [itemId, setItemId] = useState(initialItem?.id ?? active[0]?.id ?? ""); + const [itemId, setItemId] = useState(initialItem?.id ?? ""); const [rating, setRating] = useState(4); const [notes, setNotes] = useState(""); const [date, setDate] = useState(TODAY_STR); @@ -46,9 +46,8 @@ export function ConsumeFlow({ } }; - if (!item) return null; - const bin = data.bins.find((b) => b.id === item.binId); - const lifespan = Math.round((+new Date(date) - +new Date(item.purchaseDate)) / 86_400_000); + const bin = item ? data.bins.find((b) => b.id === item.binId) : undefined; + const lifespan = item ? Math.round((+new Date(date) - +new Date(item.purchaseDate)) / 86_400_000) : 0; return ( @@ -72,84 +71,92 @@ export function ConsumeFlow({ onMatch={handleScan} /> -
-
-
- {item.name} -
-
- {item.assetId} · {helpers.brandName(data, item.brandId)} · {bin?.name} · purchased{" "} - {fmt.dateShort(item.purchaseDate)} -
+ {!item ? ( +
+ Scan an asset ID to continue.
-
-
LASTED
-
{lifespan} days
-
-
- -
- - setDate(e.target.value)} /> - - + ) : ( + <>
- {[1, 2, 3, 4, 5].map((n) => ( - - ))} - - {rating}/5 - +
+
+ {item.name} +
+
+ {item.assetId} · {helpers.brandName(data, item.brandId)} · {bin?.name} · purchased{" "} + {fmt.dateShort(item.purchaseDate)} +
+
+
+
LASTED
+
{lifespan} days
+
-
-
-
- -