Files
Red-Bull-Tracker/src/components/StatusRail.tsx
T
nh9961 733c6cbae8 feat(ux): toast system, accessible modal wrapper, safer dialogs
- Global toast stack (success/error/info) replacing hidden notice/syncError
- Shared Modal: focus trap, Escape, focus restore, scroll lock; all dialogs migrated
- ConfirmDialog tone prop; limit-override now warning-styled
- Single-entry delete now requires confirmation, per-row busy spinner
- Onboarding no longer closes on failed save; inline error + skip option
2026-07-19 20:08:14 +00:00

34 lines
935 B
TypeScript

import { AlertTriangle, Loader2 } from "lucide-react";
import type { SetupStatus } from "../types";
type StatusRailProps = {
busyAction: string | null;
setupStatus: SetupStatus;
};
export function StatusRail({ busyAction, setupStatus }: StatusRailProps) {
if (!busyAction && setupStatus.state === "ok") return null;
return (
<div className="mt-3 grid gap-2">
{busyAction && (
<div className="status-card">
<Loader2 className="animate-spin" size={17} aria-hidden="true" />
Working on {actionLabel(busyAction)}...
</div>
)}
{setupStatus.state === "error" && (
<div className="status-card status-card--warning">
<AlertTriangle size={17} aria-hidden="true" />
{setupStatus.message}
</div>
)}
</div>
);
}
function actionLabel(value: string) {
return value
.replace(/^quick-/, "quick add ")
.replace(/-/g, " ");
}