Some checks failed
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / Go Lint (push) Has been cancelled
Tests / Python Lint (push) Has been cancelled
Tests / Security Scan (push) Has been cancelled
Tests / All Checks Passed (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Go Security Scan (push) Has been cancelled
Security Scanning / Python Security Scan (push) Has been cancelled
Security Scanning / Node.js Security Scan (push) Has been cancelled
Security Scanning / Docker Image Security (push) Has been cancelled
Security Scanning / Security Summary (push) Has been cancelled
CI/CD Pipeline / Go Tests (push) Has been cancelled
CI/CD Pipeline / Python Tests (push) Has been cancelled
CI/CD Pipeline / Website Tests (push) Has been cancelled
CI/CD Pipeline / Linting (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Docker Build & Push (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / CI Summary (push) Has been cancelled
ci/woodpecker/manual/build-ci-image Pipeline was successful
ci/woodpecker/manual/main Pipeline failed
All services: admin-v2, studio-v2, website, ai-compliance-sdk, consent-service, klausur-service, voice-service, and infrastructure. Large PDFs and compiled binaries excluded via .gitignore.
81 lines
2.0 KiB
TypeScript
81 lines
2.0 KiB
TypeScript
'use client'
|
|
|
|
import { LessonSession, LessonStatus } from '@/lib/companion/types'
|
|
import { LessonStartForm } from './LessonStartForm'
|
|
import { LessonActiveView } from './LessonActiveView'
|
|
import { LessonEndedView } from './LessonEndedView'
|
|
|
|
interface LessonContainerProps {
|
|
session: LessonSession | null
|
|
onStartLesson: (data: { classId: string; subject: string; topic?: string; templateId?: string }) => void
|
|
onEndLesson: () => void
|
|
onPauseToggle: () => void
|
|
onExtendTime: (minutes: number) => void
|
|
onSkipPhase: () => void
|
|
onSaveReflection: (rating: number, notes: string, nextSteps: string) => void
|
|
onAddHomework: (title: string, dueDate: string) => void
|
|
onRemoveHomework: (id: string) => void
|
|
loading?: boolean
|
|
}
|
|
|
|
export function LessonContainer({
|
|
session,
|
|
onStartLesson,
|
|
onEndLesson,
|
|
onPauseToggle,
|
|
onExtendTime,
|
|
onSkipPhase,
|
|
onSaveReflection,
|
|
onAddHomework,
|
|
onRemoveHomework,
|
|
loading,
|
|
}: LessonContainerProps) {
|
|
// Determine which view to show based on session state
|
|
const getView = (): 'start' | 'active' | 'ended' => {
|
|
if (!session) return 'start'
|
|
|
|
const status = session.status
|
|
if (status === 'completed') return 'ended'
|
|
if (status === 'not_started') return 'start'
|
|
|
|
return 'active'
|
|
}
|
|
|
|
const view = getView()
|
|
|
|
if (view === 'start') {
|
|
return (
|
|
<LessonStartForm
|
|
onStart={onStartLesson}
|
|
loading={loading}
|
|
/>
|
|
)
|
|
}
|
|
|
|
if (view === 'ended' && session) {
|
|
return (
|
|
<LessonEndedView
|
|
session={session}
|
|
onSaveReflection={onSaveReflection}
|
|
onAddHomework={onAddHomework}
|
|
onRemoveHomework={onRemoveHomework}
|
|
onStartNew={() => onEndLesson()} // This will clear the session and show start form
|
|
/>
|
|
)
|
|
}
|
|
|
|
if (session) {
|
|
return (
|
|
<LessonActiveView
|
|
session={session}
|
|
onPauseToggle={onPauseToggle}
|
|
onExtendTime={onExtendTime}
|
|
onSkipPhase={onSkipPhase}
|
|
onEndLesson={onEndLesson}
|
|
/>
|
|
)
|
|
}
|
|
|
|
return null
|
|
}
|