Files
iiEasy/components/EducationStudentsSection.tsx

148 lines
7.3 KiB
TypeScript
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import React from 'react';
import { SECTION_IDS, EDUCATION_STUDENTS_CONTENT } from '../constants';
import { StudentProgram } from '../types';
import {
LightBulbIcon, CodeBracketIcon, AcademicCapIcon, UserGroupIcon, CheckIcon
} from '../components/icons';
// Icon map for Student Programs
const studentProgramIconMap: Record<string, React.ElementType> = {
LightBulbIcon,
CodeBracketIcon,
AcademicCapIcon,
UserGroupIcon, // Example
// ... other icons
};
interface ProgramHighlightProps {
iconName: string; // Changed from icon: React.ElementType
title: string;
targetAudience: string;
description: string;
}
const ProgramHighlight: React.FC<ProgramHighlightProps> = ({ iconName, title, targetAudience, description }) => {
const IconComponent = studentProgramIconMap[iconName] || AcademicCapIcon; // Fallback icon
return (
<div className="bg-white p-6 rounded-xl">
<div className="flex items-center text-slate-700 mb-4">
<IconComponent className="w-8 h-8 mr-3" />
<div>
<h3 className="font-quicksand text-2xl font-semibold text-slate-800">{title}</h3>
<p className="font-inter text-sm text-slate-500">{targetAudience}</p>
</div>
</div>
<p className="font-inter text-slate-600 leading-relaxed">
{description}
</p>
</div>
);
};
interface EducationStudentsSectionProps {
studentPrograms: StudentProgram[];
}
const EducationStudentsSection: React.FC<EducationStudentsSectionProps> = ({ studentPrograms }) => {
const internshipBenefits = [
"Участие в реальных проектах для нашего портфолио.",
"Менторство от ведущих разработчиков и исследователей ИИ.",
"Создание сильного портфолио с кейсами мирового уровня.",
"Возможность трудоустройства для лучших стажеров.",
];
return (
<section
id={SECTION_IDS.educationStudentsPage}
className="py-16 md:py-24 bg-white min-h-screen"
>
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<header className="mb-12 md:mb-16">
<h1 className="font-quicksand text-4xl sm:text-5xl md:text-6xl font-bold text-slate-900">
{EDUCATION_STUDENTS_CONTENT.title}
</h1>
<p className="mt-4 text-lg md:text-xl text-slate-700 max-w-3xl">
{EDUCATION_STUDENTS_CONTENT.subtitle}
</p>
</header>
<div className="my-16 md:my-24 grid md:grid-cols-2 gap-12 md:gap-16 items-center">
<div className="prose prose-lg max-w-none font-inter text-slate-700">
<h2 className="font-quicksand text-3xl sm:text-4xl font-semibold text-slate-800 mb-4">Стажировки и Практика: Ваш Старт в Мире ИИ</h2>
<p>
Мы в iiEasy верим, что будущее создается сегодня. Поэтому мы открываем двери для талантливых и амбициозных студентов, желающих получить реальный опыт в разработке сайтов, приложений и передовых ИИ-решений. Наша программа стажировки в Уфе это не просто практика, это полное погружение в рабочие процессы ведущей технологической компании.
</p>
<ul className="mt-6 space-y-3 not-prose">
{internshipBenefits.map((benefit, index) => (
<li key={index} className="flex items-start">
<CheckIcon className="w-6 h-6 text-green-500 mr-3 mt-1 flex-shrink-0" />
<span>{benefit}</span>
</li>
))}
</ul>
</div>
<div className="grid grid-cols-2 gap-4">
<img src="https://picsum.photos/seed/iieasy-intern-coding/600/400" alt="Студент-стажер в iiEasy пишет код на ноутбуке в современном офисе в Уфе." className="rounded-lg shadow-md aspect-[3/2] object-cover" />
<img src="https://picsum.photos/seed/iieasy-intern-meeting/600/400" alt="Группа стажеров и ментор обсуждают проект у доски в переговорной комнате iiEasy." className="rounded-lg shadow-md aspect-[3/2] object-cover mt-8" />
</div>
</div>
<div className="my-16 md:my-20">
<h2 className="text-center font-quicksand text-3xl sm:text-4xl font-semibold text-slate-700 mb-10">
Наши программы
</h2>
{studentPrograms && studentPrograms.length > 0 ? (
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
{studentPrograms.map((program: StudentProgram) => (
<ProgramHighlight
key={program.title}
iconName={program.icon}
title={program.title}
targetAudience={program.targetAudience}
description={program.description}
/>
))}
</div>
) : (
<div className="text-center py-10 bg-white p-6 rounded-xl">
<AcademicCapIcon className="w-16 h-16 mx-auto text-slate-300 mb-4" />
<h2 className="text-2xl font-quicksand font-semibold text-slate-700 mb-3">Программы для студентов скоро будут здесь</h2>
<p className="text-slate-600 font-inter">
Мы готовим увлекательные курсы и программы. Заглядывайте позже!
</p>
</div>
)}
</div>
<div className="mt-16 text-center bg-white p-8 md:p-12 rounded-xl">
<h2 className="text-3xl font-quicksand font-semibold text-slate-800 mb-6">
{EDUCATION_STUDENTS_CONTENT.ctaTitle}
</h2>
<p className="font-inter text-lg text-slate-600 mb-8 max-w-xl mx-auto">
{EDUCATION_STUDENTS_CONTENT.ctaSubtitle}
</p>
<div className="flex flex-col sm:flex-row flex-wrap justify-center items-center gap-4 sm:gap-6">
{EDUCATION_STUDENTS_CONTENT.contactMethods.map((method) => (
<a
key={method.id}
href={method.href}
target="_blank"
rel="noopener noreferrer"
className={`group inline-flex items-center justify-center px-6 py-3 text-base font-medium text-slate-800 ${method.bgColor} ${method.hoverBgColor} rounded-full focus:outline-none focus:ring-2 ${method.ringColor} focus:ring-offset-2 transition-all duration-150 ease-in-out font-quicksand w-full sm:w-auto sm:min-w-[180px]`}
aria-label={method.ariaLabel}
>
<method.icon className="w-5 h-5" />
<span className="ml-2.5">{method.name}</span>
</a>
))}
</div>
</div>
</div>
</section>
);
};
export default EducationStudentsSection;