Files
encoach_frontend_new_v2/src/components/ai/AiRiskBadge.tsx
Yamen Ahmad 11a7265460 feat(v3): restructure project + add complete frontend
- Restructure: move backend from new_project/ to backend/
- Add full React/TypeScript frontend (37 pages, 17 services, 16 type defs, 11 query hooks)
- Add docs/ with SRS specs, user stories, and workflow documentation
- Update .gitignore for new directory layout

Workflows implemented:
  WF1 User Signup, WF2 Placement Test, WF3 Exam Configuration,
  WF4 General English Exam, WF5 Course Generation,
  WF6 Entity Student Onboarding, AI Course Generation,
  Adaptive Learning Engine UI, White-Label Branding, Score Release

Made-with: Cursor
2026-04-10 17:26:42 +04:00

46 lines
1.3 KiB
TypeScript

import { Badge } from "@/components/ui/badge";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
export type AiRiskLevel = "At Risk" | "Monitor" | "On Track";
interface Props {
riskLevel?: AiRiskLevel;
reasons?: string[];
}
export default function AiRiskBadge({ riskLevel, reasons }: Props) {
if (!riskLevel) {
return (
<Tooltip>
<TooltipTrigger asChild>
<Badge variant="outline" className="text-xs cursor-help">
Unknown
</Badge>
</TooltipTrigger>
<TooltipContent>
<p className="text-xs max-w-[200px]">Risk data not available from profile.</p>
</TooltipContent>
</Tooltip>
);
}
const variant: "destructive" | "secondary" | "default" =
riskLevel === "At Risk" ? "destructive" : riskLevel === "Monitor" ? "secondary" : "default";
const tooltipText =
reasons?.filter(Boolean).length ? reasons!.filter(Boolean).join(" · ") : "No additional details provided.";
return (
<Tooltip>
<TooltipTrigger asChild>
<Badge variant={variant} className="text-xs cursor-help">
{riskLevel}
</Badge>
</TooltipTrigger>
<TooltipContent>
<p className="text-xs max-w-[200px]">{tooltipText}</p>
</TooltipContent>
</Tooltip>
);
}