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
+
-
-
-
-
-
-
+
+
+
+ setDate(e.target.value)} />
+
+
+
+ {[1, 2, 3, 4, 5].map((n) => (
+
+ ))}
+
+ {rating}/5
+
+
+
+
+
+
+
+
+ >
+ )}
{error && (
{error}
@@ -163,7 +170,7 @@ export function ConsumeFlow({
finish.mutate()}
>
{finish.isPending ? "Saving…" : "Mark consumed"}