// Training modules
function TrainingPage({ persona }) {
const [active, setActive] = React.useState(null);
const required = TRAININGS.filter(t => t.required);
const optional = TRAININGS.filter(t => !t.required);
const totalProgress = Math.round(TRAININGS.reduce((a, t) => a + t.progress, 0) / TRAININGS.length);
return (
Convoso University
Training & courses
Required compliance training plus optional deep-dives. Progress is saved automatically and you can resume any time.
Overall progress
{totalProgress}%
{TRAININGS.filter(t => t.progress === 100).length} completed · {TRAININGS.filter(t => t.progress > 0 && t.progress < 100).length} in progress · {TRAININGS.filter(t => t.progress === 0).length} not started
setActive(TRAININGS[1])}/>
Required training
Must be completed within 30 days
{required.map(t => setActive(t)}/>)}
Recommended for you
{optional.map(t => setActive(t)}/>)}
{active &&
setActive(null)}/>}
);
}
function TrainingCard({ t, onStart }) {
const status = t.progress === 100 ? "done" : t.progress > 0 ? "in-progress" : "new";
return (
{status === "done" &&
Completed
}
{t.duration}
·
{t.lessons} lessons
{t.progress === 100 ? "Completed" : t.progress > 0 ? `${t.progress}% · resume` : "Not started"}
);
}
function FeaturedTraining({ t, onStart }) {
return (
Continue where you left off
{t.title}
Lesson 4 of {t.lessons} · {t.instructor}
~10 min remaining
);
}
function TrainingPlayer({ t, onClose }) {
const [lesson, setLesson] = React.useState(Math.floor(t.lessons * (t.progress / 100)) || 0);
const lessons = Array.from({ length: t.lessons }, (_, i) => ({
title: [
"Introduction & welcome",
"Why this matters at Convoso",
"Core principles",
"Real-world scenarios",
"Common pitfalls to avoid",
"Reporting & escalation",
"Quiz: knowledge check",
"Case study: customer story",
"Summary & resources",
"Final assessment",
"Certificate of completion",
][i] || `Lesson ${i + 1}`,
duration: `${4 + (i % 5)} min`,
}));
return (
e.stopPropagation()}>
{t.category} · Lesson {lesson + 1}
{lessons[lesson].title}
2:14 / {lessons[lesson].duration}
1×
Course outline
{lesson + 1} / {t.lessons}
{lessons.map((l, i) => (
setLesson(i)}>
{i < lesson ? : i + 1}
))}
);
}
window.TrainingPage = TrainingPage;