OpenMAIC-React / src /components /stage /scene-renderer.tsx
muthuk1's picture
Convert OpenMAIC from Next.js to React (Vite)
f56a29b verified
import { useMemo } from 'react';
import type { Scene, StageMode } from '@/lib/types/stage';
import { SlideEditor as SlideRenderer } from '../slide-renderer/Editor';
import { QuizView } from '../scene-renderers/quiz-view';
import { InteractiveRenderer } from '../scene-renderers/interactive-renderer';
import { PBLRenderer } from '../scene-renderers/pbl-renderer';
interface SceneRendererProps {
readonly scene: Scene;
readonly mode: StageMode;
}
export function SceneRenderer({ scene, mode }: SceneRendererProps) {
const renderer = useMemo(() => {
switch (scene.type) {
case 'slide':
if (scene.content.type !== 'slide') return <div>Invalid slide content</div>;
return <SlideRenderer mode={mode} />;
case 'quiz':
if (scene.content.type !== 'quiz') return <div>Invalid quiz content</div>;
return <QuizView key={scene.id} questions={scene.content.questions} sceneId={scene.id} />;
case 'interactive':
if (scene.content.type !== 'interactive') return <div>Invalid interactive content</div>;
return <InteractiveRenderer content={scene.content} sceneId={scene.id} />;
case 'pbl':
if (scene.content.type !== 'pbl') return <div>Invalid PBL content</div>;
return <PBLRenderer content={scene.content} mode={mode} sceneId={scene.id} />;
default:
return <div>Unknown scene type</div>;
}
}, [scene, mode]);
return <div className="w-full h-full">{renderer}</div>;
}