veza/apps/web/src/components/education/course-learning-view/CourseLearningViewPlayer.tsx
senke 58cd96fe2e refactor(education): CourseLearningView module with hook, subcomponents, skeleton
- Add course-learning-view/ with useCourseLearningView, Header, Player, Tabs, Sidebar, Skeleton
- Layout min-h-layout-main, no arbitrary values
- Re-export from CourseLearningView.tsx
- Stories: Default, Loading (Skeleton), Empty, Complete

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:45:58 +01:00

71 lines
2.1 KiB
TypeScript

/**
* CourseLearningView — player stage (video / quiz / article).
*/
import { Button } from '@/components/ui/button';
import { PlayCircle, HelpCircle } from 'lucide-react';
interface Lesson {
id: string;
title: string;
duration: string;
type: 'video' | 'article' | 'quiz';
content?: string;
quizId?: string;
}
interface CourseLearningViewPlayerProps {
lesson: Lesson | null;
onStartQuiz: (quizId: string) => void;
}
export function CourseLearningViewPlayer({
lesson,
onStartQuiz,
}: CourseLearningViewPlayerProps) {
if (!lesson) {
return (
<div className="bg-black aspect-video w-full flex items-center justify-center">
<p className="text-kodo-content-dim">Select a lesson</p>
</div>
);
}
if (lesson.type === 'video') {
return (
<div className="bg-black aspect-video w-full flex items-center justify-center relative">
<div className="text-center">
<PlayCircle className="w-16 h-16 text-white opacity-50 mx-auto mb-4" />
<p className="text-kodo-content-dim">Video Player Placeholder</p>
<p className="text-xs text-kodo-content-dim mt-2">{lesson.title}</p>
</div>
</div>
);
}
if (lesson.type === 'quiz') {
return (
<div className="bg-black aspect-video w-full flex items-center justify-center relative">
<div className="text-center">
<HelpCircle className="w-16 h-16 text-kodo-gold mx-auto mb-4" />
<h3 className="text-white text-xl font-bold mb-4">Quiz: {lesson.title}</h3>
<Button
variant="primary"
onClick={() => lesson.quizId && onStartQuiz(lesson.quizId)}
>
Start Quiz
</Button>
</div>
</div>
);
}
return (
<div className="p-8 max-w-2xl mx-auto text-left w-full h-full overflow-y-auto bg-kodo-graphite">
<h2 className="text-2xl font-bold text-white mb-4">{lesson.title}</h2>
<p className="text-kodo-text-main leading-relaxed">
{lesson.content ??
'This is a text-based lesson. Content would be rendered here in Markdown.'}
</p>
</div>
);
}