state definitions

This commit is contained in:
Marcelo
2026-05-02 01:35:27 +00:00
parent 4299ef3478
commit 0491237bad
16 changed files with 2887 additions and 43 deletions

View File

@@ -16,13 +16,17 @@ const STATUS_DOT: Record<RecapSummaryMachine["status"], string> = {
running: "bg-emerald-400",
"mold-change": "bg-amber-400",
stopped: "bg-red-500",
"data-loss": "bg-red-500",
offline: "bg-zinc-500",
idle: "bg-zinc-400",
};
function statusLabel(status: RecapSummaryMachine["status"], t: (key: string) => string) {
if (status === "running") return t("recap.status.running");
if (status === "mold-change") return t("recap.status.moldChange");
if (status === "stopped") return t("recap.status.stopped");
if (status === "data-loss") return t("recap.status.dataLoss");
if (status === "idle") return t("recap.status.idle");
return t("recap.status.offline");
}
@@ -38,7 +42,8 @@ export default function RecapMachineCard({ machine, rangeStart, rangeEnd }: Prop
const zeroActivity = machine.goodParts === 0 && machine.scrap === 0 && machine.stopsCount === 0;
const primaryMetric = machine.oee == null ? "—" : `${machine.oee.toFixed(1)}%`;
const ongoingStopMin = machine.ongoingStopMin ?? 0;
const isUrgent = machine.status === "stopped" && ongoingStopMin >= 5;
const isUrgent = (machine.status === "stopped" && ongoingStopMin >= 5) || machine.status === "data-loss";
const isCalm = machine.status === "idle";
const timelineSegments = timeline?.segments ?? machine.miniTimeline;
const timelineStart = timeline?.range.start ?? rangeStart;
const timelineEnd = timeline?.range.end ?? rangeEnd;
@@ -88,6 +93,8 @@ export default function RecapMachineCard({ machine, rangeStart, rangeEnd }: Prop
className={`rounded-2xl border p-4 transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-emerald-300/80 ${
isUrgent
? "border-red-500/60 bg-red-500/10 hover:bg-red-500/15 ring-2 ring-red-500/40 animate-pulse"
: isCalm
? "border-white/5 bg-white/[0.02] hover:bg-white/[0.04] opacity-70"
: "border-white/10 bg-white/5 hover:bg-white/10"
}`}
>
@@ -142,10 +149,17 @@ export default function RecapMachineCard({ machine, rangeStart, rangeEnd }: Prop
</div>
) : null}
<div className={`mt-3 text-xs ${isUrgent ? "text-red-200 font-semibold" : "text-zinc-400"}`}>
{isUrgent
? t("recap.card.stoppedFor", { min: ongoingStopMin })
<div className={`mt-3 text-xs ${isUrgent ? "text-red-200 font-semibold" : isCalm ? "text-zinc-500" : "text-zinc-400"}`}>
{machine.status === "data-loss"
? t("recap.card.dataLoss", { count: machine.stateContext.untrackedCycleCount ?? 0 })
+ (machine.activeWorkOrderId ? ` · WO ${machine.activeWorkOrderId}` : "")
: machine.status === "stopped" && ongoingStopMin >= 5
? (machine.stateContext.stoppedReason === "not_started"
? t("recap.card.notStarted")
: t("recap.card.stoppedFor", { min: ongoingStopMin }))
+ (machine.activeWorkOrderId ? ` · WO ${machine.activeWorkOrderId}` : "")
: machine.status === "idle"
? t("recap.card.idle")
: footerText}
</div>
</Link>