// Student-facing screens: dashboard (continue learning), catalog, course detail.
function StudentSidebar({ active, onNav }) {
const items = [
{ id: 'dash', fa: 'خانه', icon: 'home' },
{ id: 'mycourses',fa: 'دورههای من', icon: 'book', badge: '۳' },
{ id: 'catalog', fa: 'کاوش دورهها', icon: 'search' },
{ id: 'cert', fa: 'گواهینامهها', icon: 'cert' },
{ id: 'chat', fa: 'گفتوگو', icon: 'chat' },
];
return (
یادگیری
{items.map(n => (
onNav(n.id)}>
{n.fa}
{n.badge && {n.badge} }
))}
تنظیمات
سم
سارا محمدی
عضو از ۱۴۰۳/۰۹
);
}
function CourseCard({ c, onOpen }) {
return (
onOpen?.(c)} style={{ cursor: 'pointer', overflow: 'hidden', display: 'flex', flexDirection: 'column' }}>
{c.badge && (
{c.badge}
)}
{c.cat} · {c.level}
{c.title}
توسط {c.instructor}
{c.rating && (<>
{String(c.rating).replace(/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d])}
({String(c.reviews).replace(/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d])})
>)}
{String(c.hours).replace(/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d])} ساعت
{c.price}
تومان
{c.oldPrice && (
{c.oldPrice}
)}
);
}
function fa(s) { return String(s).replace(/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d]); }
// — Dashboard —
function StudentDash({ onOpen }) {
const { MY_COURSES, CATALOG, FEATURED_INSTRUCTORS } = window.STUDENT_DATA;
const inProgress = MY_COURSES.filter(c => !c.completed);
const continueWith = inProgress[0];
return (
{/* greeting + continue hero */}
سلام سارا 👋 ادامه بدیم؟
{continueWith.title}
درس بعدی: {continueWith.nextLesson}
{fa(continueWith.completedLessons)} از {fa(continueWith.totalLessons)} درس
{fa(continueWith.progress)}٪
ادامهی یادگیری
جزئیات دوره
هدف هفتگی
۴ از ۵ روز
{['ش','ی','د','س','چ','پ','ج'].map((d, i) => (
{d}
{i < 4 && }
{i === 4 && اکنون }
))}
۴ روز پیاپی! امروز هم ادامه بده.
{/* my courses */}
{MY_COURSES.map(c => (
{c.completed &&
تکمیل شد}
{c.title}
توسط {c.instructor}
{fa(c.completedLessons)} از {fa(c.totalLessons)} درس
{fa(c.progress)}٪
))}
{/* recommended */}
{CATALOG.slice(0, 4).map(c => onOpen('detail')} />)}
);
}
// — Catalog —
function StudentCatalog({ onOpen }) {
const { CATALOG, CATEGORIES, FEATURED_INSTRUCTORS } = window.STUDENT_DATA;
const [cat, setCat] = React.useState('all');
return (
{/* hero search */}
{/* categories */}
{CATEGORIES.map(c => (
setCat(c.id)}
style={{
background: cat === c.id ? 'var(--accent)' : 'var(--surface)',
color: cat === c.id ? 'white' : 'var(--ink)',
borderColor: cat === c.id ? 'transparent' : 'var(--line)',
padding: '8px 14px',
}}>
{c.fa}
{fa(c.count)}
))}
{/* featured instructors strip */}
مدرسهای منتخب
پس از خرید پکیج هر مدرس، به فضای اختصاصی او دسترسی پیدا میکنی
همه ←
{FEATURED_INSTRUCTORS.map(i => (
{i.initials}
{i.name}
{i.verified && }
{i.topic}
⭐ {fa(i.rating)} · {fa(i.students)} دانشجو
))}
{/* course grid */}
همهی دورهها
مرتبسازی
فیلترها
{CATALOG.map(c => onOpen('detail')} />)}
);
}
// — Course Detail —
function StudentCourseDetail() {
const c = window.STUDENT_DATA.COURSE_DETAIL;
const [tab, setTab] = React.useState('overview');
return (
{/* hero */}
پرفروش
طراحی
{c.level}
{c.tagline}
{fa(c.rating)}
({fa(c.reviews)} نظر)
{fa(c.students)} دانشجو
{fa(c.hours)} ساعت
{c.instructor.initials}
توسط {c.instructor.name}
{c.instructor.topic}
پیشنمایش رایگان · ۲ دقیقه
{/* highlights */}
چی یاد میگیری
{c.highlights.map((h, i) => (
{h}
))}
{/* tabs */}
{[['overview','سرفصلها'],['instructor','مدرس'],['reviews','نظرات'],['faq','سؤالات']].map(([k,v]) => (
setTab(k)}>{v}
))}
{tab === 'overview' && (
{c.curriculum.map((m, i) => (
{fa(i+1)}
{m.title}
{fa(m.lessons)} درس · {fa(m.minutes)} دقیقه
))}
)}
{tab === 'instructor' && (
{c.instructor.initials}
{c.instructor.name}
{c.instructor.topic}
⭐ {fa(c.instructor.rating)}
{fa(c.instructor.students)} دانشجو
{fa(c.instructor.courses)} دوره
آرش پاکدل ۱۰ سال در شرکتهای فناوری ایرانی بهعنوان طراح ارشد محصول کار کرده و تجربهی همکاری با تیمهای مهندسی، محصول و بازاریابی را دارد. علاقهاش آموزش طراحی به زبان ساده و کاربردی است.
)}
{tab === 'reviews' && (
{c.reviewsList.map((r, i) => (
{r.initials}
{r.name}
{r.when}
{[1,2,3,4,5].map(n => (
))}
{r.text}
))}
)}
{tab === 'faq' && (
{c.faq.map((f, i) => (
{f.q}
{f.a}
))}
)}
{/* purchase rail */}
{c.price}
تومان
{c.oldPrice && (<>
{c.oldPrice}
{c.discount} تخفیف
>)}
این تخفیف ۲ روز دیگر تموم میشه
ثبتنام در دوره
پیشنمایش رایگان
{[
{ ic: 'video', t: `${fa(c.lessons)} درس · ${fa(c.hours)} ساعت ویدیو` },
{ ic: 'file', t: 'فایلهای دانلودی + تمرینهای عملی' },
{ ic: 'cert', t: 'گواهی پایان دوره با امضای مدرس' },
{ ic: 'phone', t: 'دسترسی مادامالعمر، روی هر دستگاه' },
{ ic: 'globe', t: `زبان: ${c.language} · بهروزرسانی: ${c.updated}` },
].map((x, i) => (
{x.t}
))}
);
}
window.StudentDash = StudentDash;
window.StudentCatalog = StudentCatalog;
window.StudentCourseDetail = StudentCourseDetail;
window.StudentSidebar = StudentSidebar;