- Retired Staff
+ FACULTY ALUMNI
Honoring our retired faculty and staff members for their dedicated service
diff --git a/src/components/home/EventSection.tsx b/src/components/home/EventSection.tsx
index d034147..6978236 100644
--- a/src/components/home/EventSection.tsx
+++ b/src/components/home/EventSection.tsx
@@ -2,60 +2,113 @@
import React, { useState, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { eventAPI, Event } from '../../lib/api';
+import { educationService, Course } from '../../services/educationService';
+
+// Combined type for events and courses
+type EventOrCourse = (Event & { type: 'event' }) | (Course & { type: 'course', date: string, mainImage: string });
const EventsSection = () => {
const router = useRouter();
const [upcomingEvents, setUpcomingEvents] = useState([]);
const [pastEvents, setPastEvents] = useState([]);
+ const [courses, setCourses] = useState([]);
const [loading, setLoading] = useState(true);
+ const [combinedUpcoming, setCombinedUpcoming] = useState([]);
useEffect(() => {
- loadEvents();
+ loadData();
}, []);
- const loadEvents = async () => {
+ const loadData = async () => {
try {
setLoading(true);
- const [upcoming, past] = await Promise.all([
+ const [upcoming, past, activeCourses] = await Promise.all([
eventAPI.getUpcomingEvents(),
- eventAPI.getPastEvents()
+ eventAPI.getPastEvents(),
+ educationService.getActiveCourses()
]);
+
setUpcomingEvents(upcoming);
setPastEvents(past);
+ setCourses(activeCourses);
+
+ // Combine events and courses for display
+ const eventsWithType: EventOrCourse[] = upcoming.map(event => ({
+ ...event,
+ type: 'event' as const
+ }));
+
+ const coursesWithType: EventOrCourse[] = activeCourses.map(course => ({
+ ...course,
+ type: 'course' as const,
+ date: course.startDate || 'Date TBD',
+ mainImage: course.image
+ }));
+
+ // Combine and sort by date
+ const combined = [...eventsWithType, ...coursesWithType].sort((a, b) => {
+ const dateA = new Date(a.date);
+ const dateB = new Date(b.date);
+ return dateA.getTime() - dateB.getTime();
+ });
+
+ setCombinedUpcoming(combined);
} catch (error) {
- console.error('Error loading events:', error);
+ console.error('Error loading data:', error);
} finally {
setLoading(false);
}
};
- // Navigation function for App Router
- const navigateToEventDetail = (eventId: string | number) => {
- router.push(`/event-detail/${eventId}`);
+ // Navigation functions
+ const navigateToDetail = (item: EventOrCourse) => {
+ if (item.type === 'event') {
+ router.push(`/event-detail/${item.id}`);
+ } else {
+ router.push(`/education-training/course-detail?id=${item.id}`);
+ }
};
const navigateToAllEvents = () => {
router.push('/events');
};
- // Format price display from fees
- const formatPrice = (event: Event) => {
- if (event.fee && event.fee.length > 0) {
- return `₹${event.fee[0].cost} per ticket`;
+ // Format price display
+ const formatPrice = (item: EventOrCourse) => {
+ if (item.type === 'event') {
+ if (item.fee && item.fee.length > 0) {
+ return `₹${item.fee[0].cost} per ticket`;
+ }
+ return '₹1,800 per ticket';
+ } else {
+ return item.price !== 'N/A' ? item.price : 'Contact for pricing';
}
- return '₹1,800 per ticket';
};
- // Top section events (first 4 events for the grid)
- const topEvents = upcomingEvents.slice(0, 4);
+ // Get title for the item
+ const getTitle = (item: EventOrCourse) => {
+ return item.title;
+ };
+
+ // Get description for the item
+ const getDescription = (item: EventOrCourse) => {
+ if (item.type === 'event') {
+ return item.description;
+ } else {
+ return item.description;
+ }
+ };
+
+ // Top section items (first 4 for the grid)
+ const topItems = combinedUpcoming.slice(0, 4);
- // Featured event (first event)
- const featuredEvent = upcomingEvents.length > 0 ? upcomingEvents[0] : null;
+ // Featured item (first item)
+ const featuredItem = combinedUpcoming.length > 0 ? combinedUpcoming[0] : null;
if (loading) {
return (
-
Loading events...
+
Loading events and courses...
);
}
@@ -65,7 +118,7 @@ const EventsSection = () => {
{/* Section Header */}
- Our Events
+ Our Events & Courses
- {/* Events Grid - Top Section with Event Details */}
- {topEvents.length === 0 ? (
+ {/* Events/Courses Grid - Top Section with Details */}
+ {topItems.length === 0 ? (
-
No upcoming events.
+
No upcoming events or courses.
) : (
- {topEvents.map((event, index) => (
+ {topItems.map((item, index) => (
navigateToEventDetail(event.id)}
+ onClick={() => navigateToDetail(item)}
>

{/* Gradient overlay for better text readability */}
- {/* Event details overlay */}
+ {/* Item type badge */}
+
+
+ {item.type === 'event' ? 'Event' : 'Course'}
+
+
+
+ {/* Item details overlay */}
- {event.date}
+ {item.date}
-
- {event.title}
+
+ {getTitle(item)}
- {formatPrice(event)}
+ {formatPrice(item)}
@@ -116,26 +182,40 @@ const EventsSection = () => {
)}
- {/* Featured Events Section */}
+ {/* Featured Section */}
- {/* Left - Large Featured Event */}
+ {/* Left - Large Featured Item */}
-
Upcoming Events
- {!featuredEvent ? (
+
+ Featured {featuredItem?.type === 'course' ? 'Course' : 'Event'}
+
+ {!featuredItem ? (
-
No upcoming events.
+
No upcoming events or courses.
) : (
navigateToEventDetail(featuredEvent.id)}
+ onClick={() => navigateToDetail(featuredItem)}
>

+ {/* Item type badge */}
+
+
+ {featuredItem.type === 'event' ? 'Event' : 'Course'}
+
+
{/* Pagination dots */}
@@ -147,27 +227,47 @@ const EventsSection = () => {
- {featuredEvent.date}
+ {featuredItem.date}
- {featuredEvent.title}
+ {getTitle(featuredItem)}
-
- {featuredEvent.description}
-
- {featuredEvent.detail}
+ {getDescription(featuredItem)}
+ {featuredItem.type === 'event' && (
+
+ {featuredItem.detail}
+
+ )}
+ {featuredItem.type === 'course' && (
+
+
+ ⏱️
+ {featuredItem.duration}
+
+
+ 👥
+ {featuredItem.seats} seats
+
+
+ 👨🏫
+ {featuredItem.instructor}
+
+
+ )}
- Share Event
-
-
- 📍 {featuredEvent.venue?.[0]?.address || 'Convention Center, Medical District'}
+ Share {featuredItem.type === 'course' ? 'Course' : 'Event'}
+ {featuredItem.type === 'event' && (
+
+ 📍 {featuredItem.venue?.[0]?.address || 'Convention Center, Medical District'}
+
+ )}
@@ -179,17 +279,19 @@ const EventsSection = () => {
}}
onClick={(e) => {
e.stopPropagation();
- console.log('Book seat clicked');
+ navigateToDetail(featuredItem);
}}
>
- Book Your Seat
+ {featuredItem.type === 'course' ? 'Apply Now' : 'Book Your Seat'}
- {formatPrice(featuredEvent)}
-
-
- Early bird discount available
+ {formatPrice(featuredItem)}
+ {featuredItem.type === 'event' && (
+
+ Early bird discount available
+
+ )}
@@ -197,7 +299,7 @@ const EventsSection = () => {
)}
- {/* Right - Event List with Scroller */}
+ {/* Right - Past Events List with Scroller */}
Past Events
{pastEvents.length === 0 ? (
@@ -210,7 +312,7 @@ const EventsSection = () => {
navigateToEventDetail(event.id)}
+ onClick={() => router.push(`/event-detail/${event.id}`)}
>
![]()
{
{event.title}
-
+
{event.description}
@@ -235,14 +337,11 @@ const EventsSection = () => {
style={{ color: '#012068' }}
onClick={(e) => {
e.stopPropagation();
- navigateToEventDetail(event.id);
+ router.push(`/event-detail/${event.id}`);
}}
>
View Details
- {/*
- {formatPrice(event)}
- */}
diff --git a/src/lib/api.ts b/src/lib/api.ts
index 376adb3..f21f8d4 100644
--- a/src/lib/api.ts
+++ b/src/lib/api.ts
@@ -18,7 +18,8 @@ export interface Event {
phone: string;
email: string;
isActive: boolean;
- bookSeatLink?: string; // NEW FIELD
+ bookSeatLink?: string; // Registration/booking link
+ learnMoreLink?: string; // Additional information link
professors?: Professor[];
}