bs-p2/app/components/MyCourseTheoryModule.tsx

127 lines
4.6 KiB
TypeScript

import React, { useState } from 'react';
import { Timeline } from 'antd';
interface MaterialItem {
id: number;
material: number;
title: string;
type: string;
time: string;
date: string;
source: string;
}
const materialData: MaterialItem[] = [
{
id: 1,
material: 1,
title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
type: "Video",
time: "30 mins",
date: "28-01-2024",
source: "https://videos.pexels.com/video-files/3195394/3195394-uhd_2560_1440_25fps.mp4"
},
{
id: 2,
material: 1,
title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
type: "Video",
time: "30 mins",
date: "28-01-2024",
source: "https://videos.pexels.com/video-files/5538137/5538137-sd_640_360_25fps.mp4"
},
{
id: 3,
material: 1,
title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
type: "Reading Material",
time: "8 mins",
date: "28-01-2024",
source: "https://pdfobject.com/pdf/sample.pdf"
},
{
id: 4,
material: 1,
title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
type: "MCQ",
time: "5 mins",
date: "28-01-2024",
source: "https://videos.pexels.com/video-files/3195394/3195394-uhd_2560_1440_25fps.mp4"
},
{
id: 5,
material: 1,
title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
type: "Video",
time: "30 mins",
date: "28-01-2024",
source: "https://videos.pexels.com/video-files/5532762/5532762-sd_960_506_25fps.mp4"
},
{
id: 6,
material: 1,
title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
type: "Video",
time: "30 mins",
date: "28-01-2024",
source: "https://videos.pexels.com/video-files/5538262/5538262-sd_640_360_25fps.mp4"
}
];
const TimelineComponent = () => {
const [selectedItem, setSelectedItem] = useState(materialData[0]);
const handleItemClick = (item : MaterialItem) => {
setSelectedItem(item);
};
const timelineItems = materialData.map((item) => ({
children: (
<div className='p-2' onClick={() => handleItemClick(item)} style={{ cursor: 'pointer', backgroundColor: item.id === selectedItem.id ? '#FFF4EA' : '#FFF'}}>
<p className='text-[12px] font-[600] text-[#6E6E6E]'><span>Material {item.material} </span> | <span>{item.date} </span></p>
<h2 className='text-[18px] font-[700]'>{item.title}</h2>
<p className='text-[14px] font-[600] text-[#EF7A0C]'><span>{item.type}</span> | <span>{item.time}</span></p>
</div>
),
color: item.id === selectedItem.id ? '#EF7A0C' : '#CFCFCF',
dot: item.id === selectedItem.id
? <div className='relative inline-block'>
<span className='' style={{ border: '4px solid #EF7A0C', borderRadius: '50%', display: 'inline-block', width: 32, height: 32 }}></span>
<span className='absolute inset-0 m-auto mt-[10px] h-10 w-10' style={{ backgroundColor: '#EF7A0C', borderRadius: '50%', display: 'inline-block', width: 12, height: 12 }}></span>
</div>
: null,
}));
return (
<div>
<section className='container mx-auto px-4'>
<div className='grid grid-cols-1 md:grid-cols-7 gap-x-8'>
<div className='md:col-span-2 h-screen border-r-[1px] border-r-[#CFCFCF]'>
<div className='mt-[40px]'>
<Timeline items={timelineItems} />
</div>
</div>
<div className='md:col-span-5 '>
<div className='pt-8'>
{selectedItem.type === 'Video' && (
<video autoPlay loop controls src={selectedItem.source} width="100%" muted />
)}
{selectedItem.type === 'Reading Material' && (
<iframe src={selectedItem.source} width="100%" height="500px" />
)}
{selectedItem.type === 'MCQ' && (
<div>
{/* Render MCQ content here */}
</div>
)}
<p className='text-[12px] font-[600] text-[#6E6E6E]'><span>Material {selectedItem.material} </span> | <span>{selectedItem.date} </span></p>
<h2 className='text-[18px] font-[700]'>{selectedItem.title}</h2>
<p className='text-[14px] font-[600] text-[#EF7A0C]'><span>{selectedItem.type}</span> | <span>{selectedItem.time}</span></p>
</div>
</div>
</div>
</section>
</div>
);
};
export default TimelineComponent;