fix(ui): fix X button hover, clean ExamEnum titles, route CBT DPP to real /cbt/[id] engine

This commit is contained in:
2026-07-27 15:21:13 +05:30
parent 9fb23d05e1
commit f7c452aba6
2 changed files with 22 additions and 19 deletions

View File

@@ -83,10 +83,12 @@ export default function PrepPilotAIPage() {
if (t.includes('chem')) return '/dpps/dps-che-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0'; if (t.includes('chem')) return '/dpps/dps-che-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0';
if (t.includes('math')) return '/dpps/dps-mth-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0'; if (t.includes('math')) return '/dpps/dps-mth-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0';
if (t.includes('bio')) return '/dpps/dps-bio-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0'; if (t.includes('bio')) return '/dpps/dps-bio-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0';
// Default fallback
return '/dpps/dps-phy-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0'; return '/dpps/dps-phy-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0';
}; };
// Strip ugly ExamEnum. prefix from seeded test titles
const cleanTitle = (title: string) => title.replace(/\s*\(ExamEnum\.[^)]+\)/, '');
return ( return (
<div className="p-8 space-y-8 animate-in fade-in slide-in-from-bottom-4 duration-500 max-w-5xl mx-auto"> <div className="p-8 space-y-8 animate-in fade-in slide-in-from-bottom-4 duration-500 max-w-5xl mx-auto">
<div className="flex flex-col md:flex-row md:items-center justify-between p-8 bg-gradient-to-r from-secondary/50 to-background border border-border rounded-2xl shadow-sm gap-6"> <div className="flex flex-col md:flex-row md:items-center justify-between p-8 bg-gradient-to-r from-secondary/50 to-background border border-border rounded-2xl shadow-sm gap-6">
@@ -169,9 +171,9 @@ export default function PrepPilotAIPage() {
</> </>
) : null} ) : null}
</div> </div>
<h3 className="font-bold text-lg leading-tight group-hover:text-[#00F0FF] transition-colors flex flex-wrap items-center gap-2"> <h3 className="font-bold text-lg leading-tight group-hover:text-[#00F0FF] transition-colors">
{dpp.title} {cleanTitle(dpp.title)}
<span className={`text-[10px] uppercase px-2 py-0.5 rounded-md border font-bold tracking-wider ${getDifficultyColor(dpp.difficulty)}`}> <span className={`ml-2 text-[10px] uppercase px-2 py-0.5 rounded-md border font-bold tracking-wider ${getDifficultyColor(dpp.difficulty)}`}>
{dpp.difficulty} {dpp.difficulty}
</span> </span>
</h3> </h3>
@@ -196,15 +198,15 @@ export default function PrepPilotAIPage() {
<Button variant="outline" size="sm" className="font-bold border-border">Result</Button> <Button variant="outline" size="sm" className="font-bold border-border">Result</Button>
</Link> </Link>
{!isExpired && ( {!isExpired && (
<Link href={`/dashboard/ai-coach/cbt-dpp/${dpp.id}`}> <Link href={`/cbt/${dpp.id}`}>
<Button variant="secondary" size="sm" className="font-bold bg-[#00F0FF]/10 text-[#00F0FF] hover:bg-[#00F0FF]/20 gap-2"> <Button variant="secondary" size="sm" className="font-bold bg-[#00F0FF]/10 text-[#00F0FF] hover:bg-[#00F0FF]/20 gap-2">
Retake CBT <Play size={14} className="fill-current" /> Retake CBT
</Button> </Button>
</Link> </Link>
)} )}
</> </>
) : ( ) : (
<Link href={`/dashboard/ai-coach/cbt-dpp/${dpp.id}`}> <Link href={`/cbt/${dpp.id}`}>
<Button variant="secondary" size="sm" className="rounded-xl bg-[#00F0FF] text-black hover:bg-[#00F0FF]/90 font-extrabold gap-2 text-xs shadow-[0_0_12px_rgba(0,240,255,0.2)]"> <Button variant="secondary" size="sm" className="rounded-xl bg-[#00F0FF] text-black hover:bg-[#00F0FF]/90 font-extrabold gap-2 text-xs shadow-[0_0_12px_rgba(0,240,255,0.2)]">
<Play size={14} className="fill-black" /> Launch CBT DPP <Play size={14} className="fill-black" /> Launch CBT DPP
</Button> </Button>

View File

@@ -83,10 +83,12 @@ export default function DPPPage() {
if (t.includes('chem')) return '/dpps/dps-che-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0'; if (t.includes('chem')) return '/dpps/dps-che-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0';
if (t.includes('math')) return '/dpps/dps-mth-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0'; if (t.includes('math')) return '/dpps/dps-mth-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0';
if (t.includes('bio')) return '/dpps/dps-bio-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0'; if (t.includes('bio')) return '/dpps/dps-bio-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0';
// Default fallback
return '/dpps/dps-phy-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0'; return '/dpps/dps-phy-ch4-20260707.pdf#toolbar=0&navpanes=0&scrollbar=0';
}; };
// Strip ugly ExamEnum. prefix from seeded test titles
const cleanTitle = (title: string) => title.replace(/\s*\(ExamEnum\.[^)]+\)/, '');
return ( return (
<div className="p-8 space-y-8 animate-in fade-in slide-in-from-bottom-4 duration-500 max-w-5xl mx-auto"> <div className="p-8 space-y-8 animate-in fade-in slide-in-from-bottom-4 duration-500 max-w-5xl mx-auto">
<div className="flex flex-col md:flex-row md:items-center justify-between p-8 bg-gradient-to-r from-secondary/50 to-background border border-border rounded-2xl shadow-sm gap-6"> <div className="flex flex-col md:flex-row md:items-center justify-between p-8 bg-gradient-to-r from-secondary/50 to-background border border-border rounded-2xl shadow-sm gap-6">
@@ -169,9 +171,9 @@ export default function DPPPage() {
</> </>
) : null} ) : null}
</div> </div>
<h3 className="font-bold text-lg leading-tight group-hover:text-[#00F0FF] transition-colors flex flex-wrap items-center gap-2"> <h3 className="font-bold text-lg leading-tight group-hover:text-[#00F0FF] transition-colors">
{dpp.title} {cleanTitle(dpp.title)}
<span className={`text-[10px] uppercase px-2 py-0.5 rounded-md border font-bold tracking-wider ${getDifficultyColor(dpp.difficulty)}`}> <span className={`ml-2 text-[10px] uppercase px-2 py-0.5 rounded-md border font-bold tracking-wider ${getDifficultyColor(dpp.difficulty)}`}>
{dpp.difficulty} {dpp.difficulty}
</span> </span>
</h3> </h3>
@@ -224,7 +226,7 @@ export default function DPPPage() {
</div> </div>
<div> <div>
<h3 className="font-black text-lg flex items-center gap-2"> <h3 className="font-black text-lg flex items-center gap-2">
{selectedPdfDpp.title} {cleanTitle(selectedPdfDpp.title)}
<span className="text-[10px] bg-yellow-500/10 text-yellow-500 border border-yellow-500/20 px-2 py-0.5 rounded-full uppercase tracking-wider font-extrabold"> <span className="text-[10px] bg-yellow-500/10 text-yellow-500 border border-yellow-500/20 px-2 py-0.5 rounded-full uppercase tracking-wider font-extrabold">
Protected In-App PDF View Protected In-App PDF View
</span> </span>
@@ -234,14 +236,12 @@ export default function DPPPage() {
</p> </p>
</div> </div>
</div> </div>
<Button <button
onClick={() => setSelectedPdfDpp(null)} onClick={() => setSelectedPdfDpp(null)}
variant="outline" className="ml-4 flex-shrink-0 w-9 h-9 rounded-full border border-border bg-secondary flex items-center justify-center text-foreground hover:bg-destructive hover:border-destructive hover:text-white transition-all"
size="icon"
className="rounded-full border-border hover:bg-secondary"
> >
<X size={18} /> <X size={18} />
</Button> </button>
</div> </div>
{/* Security Notice Banner */} {/* Security Notice Banner */}
@@ -259,12 +259,13 @@ export default function DPPPage() {
{/* Protected PDF Document Sheet Content (select-none) */} {/* Protected PDF Document Sheet Content (select-none) */}
<div <div
onContextMenu={(e) => e.preventDefault()} onContextMenu={(e) => e.preventDefault()}
className="flex-1 w-full h-full min-h-[60vh] select-none bg-[#525659]" className="flex-1 w-full select-none bg-[#525659] overflow-hidden" style={{minHeight: '55vh'}}
> >
<embed <embed
src={getPdfUrl(selectedPdfDpp.title)} src={getPdfUrl(selectedPdfDpp.title)}
type="application/pdf" type="application/pdf"
className="w-full h-full rounded-b-lg" className="w-full h-full"
style={{height: '55vh'}}
/> />
</div> </div>