From 4db6f5d132c1b11715cb3927f8afecbcb2399d29 Mon Sep 17 00:00:00 2001 From: mukeshs Date: Wed, 19 Nov 2025 15:01:00 +0530 Subject: [PATCH] Changes on 19-11-2025 --- src/components/Layouts/Header.tsx | 95 +++- src/components/about/StatisticsTiles.tsx | 56 ++- src/components/blogs/BlogDetail.tsx | 31 -- src/components/events/EventDetail.tsx | 39 +- .../events/MedicalEventsComponent.tsx | 405 +++++++++++------- src/components/faculty/TeamListing.tsx | 2 +- src/components/home/EventSection.tsx | 225 +++++++--- src/lib/api.ts | 3 +- 8 files changed, 579 insertions(+), 277 deletions(-) diff --git a/src/components/Layouts/Header.tsx b/src/components/Layouts/Header.tsx index 573a71e..abfc03f 100644 --- a/src/components/Layouts/Header.tsx +++ b/src/components/Layouts/Header.tsx @@ -7,18 +7,24 @@ import { usePathname } from "next/navigation"; const Header = () => { const [isMenuOpen, setIsMenuOpen] = useState(false); + const [isServicesOpen, setIsServicesOpen] = useState(false); + const [isMobileServicesOpen, setIsMobileServicesOpen] = useState(false); const pathname = usePathname(); const closeAllMenus = () => { setIsMenuOpen(false); + setIsServicesOpen(false); + setIsMobileServicesOpen(false); }; + + const menuItems = [ { href: "/", label: "Home" }, { href: "/about", label: "About" }, { href: "/teamMember", label: "Our Team" }, { href: "/education-training", label: "Academics & Research" }, - { href: "/services", label: "Services" }, + { href: "/services", label: "Services", hasDropdown: true }, { href: "/events", label: "Events" }, { href: "/blogs", label: "Blogs" }, { href: "/career", label: "Career" }, @@ -77,6 +83,50 @@ const Header = () => { {menuItems.map((item, idx) => { const isActive = pathname === item.href || (item.href !== "/" && pathname.startsWith(item.href)); + + if (item.hasDropdown) { + return ( +
setIsServicesOpen(true)} + onMouseLeave={() => setIsServicesOpen(false)} + > + + {item.label} + + + + + + {/* Services Dropdown */} + {isServicesOpen && ( +
+ + Acute Care Surgery Services + +
+ )} +
+ ); + } + return ( { - {/* Mobile menu button - More visible */} + {/* Mobile menu button */} + + {/* Mobile Services Submenu */} + {isMobileServicesOpen && ( + + )} + + ); + } + return (
  • { }; return ( -
    -
    +
    +

    Our Trauma Care Services @@ -86,33 +86,31 @@ const StatisticsTiles = () => {

    ) : ( - // Display tiles -
    + // Display services one after another +
    {tiles.map((tile, index) => ( -
    -
    -

    - {tile.title} -

    -
      - {parseDescription(tile.description).map((point, idx) => ( -
    • - {point} -
    • - ))} -
    -
    +
    +

    + {tile.title} +

    +
      + {parseDescription(tile.description).map((point, idx) => ( +
    • + + {point} +
    • + ))} +
    ))}
    diff --git a/src/components/blogs/BlogDetail.tsx b/src/components/blogs/BlogDetail.tsx index b34076b..ebef6fa 100644 --- a/src/components/blogs/BlogDetail.tsx +++ b/src/components/blogs/BlogDetail.tsx @@ -116,20 +116,6 @@ const BlogDetail: React.FC = () => { target.src = '/images/default-blog-image.jpg'; }; - const getAuthorName = (blog: Blog) => { - if (blog.professors && blog.professors.length > 0) { - return blog.professors.map(prof => prof.firstName || prof.name).join(', '); - } - return 'Medical Team'; - }; - - const getAuthorBio = (blog: Blog) => { - if (blog.professors && blog.professors.length > 0) { - return `Medical professional${blog.professors.length > 1 ? 's' : ''} specializing in trauma care and mental health support.`; - } - return 'Our medical team consists of experienced professionals dedicated to trauma care and mental health support.'; - }; - if (!mounted) { return null; } @@ -286,23 +272,6 @@ const BlogDetail: React.FC = () => { {blogData.readTime}
    - - {/* Author Info */} -
    -
    - - {getAuthorName(blogData).charAt(0)} - -
    -
    -

    - {getAuthorName(blogData)} -

    -

    - {getAuthorBio(blogData)} -

    -
    -
    {/* Share Buttons */} diff --git a/src/components/events/EventDetail.tsx b/src/components/events/EventDetail.tsx index 1a5a1ef..3e73aef 100644 --- a/src/components/events/EventDetail.tsx +++ b/src/components/events/EventDetail.tsx @@ -1,6 +1,6 @@ 'use client' import React, { useState, useEffect } from 'react'; -import { Calendar, MapPin, Clock, Users, Star, Share2, ArrowLeft, ChevronRight } from 'lucide-react'; +import { Calendar, MapPin, Clock, Users, Star, Share2, ArrowLeft, ChevronRight, ExternalLink } from 'lucide-react'; import { useRouter, useParams } from 'next/navigation'; import Link from "next/link"; import { eventAPI, Event } from '../../lib/api'; // Adjust path as needed @@ -75,7 +75,7 @@ const EventDetail = () => { } }; - // NEW FUNCTION: Handle book seat click - redirects to admin-provided link + // Handle book seat click - redirects to admin-provided link const handleBookSeat = () => { if (!eventData) return; @@ -100,6 +100,28 @@ const EventDetail = () => { } }; + // Handle learn more click - redirects to admin-provided learn more link + const handleLearnMore = () => { + if (!eventData) return; + + // Check if admin has provided a custom learn more link + if (eventData.learnMoreLink && eventData.learnMoreLink.trim() !== '') { + // Validate if it's a proper URL + try { + // If the URL doesn't start with http:// or https://, add https:// + let url = eventData.learnMoreLink; + if (!url.startsWith('http://') && !url.startsWith('https://')) { + url = 'https://' + url; + } + // Open in new tab + window.open(url, '_blank', 'noopener,noreferrer'); + } catch (error) { + console.error('Invalid learn more link:', error); + alert('Invalid information link. Please contact the organizers.'); + } + } + }; + const handleShare = async () => { if (!eventData || typeof window === 'undefined') return; @@ -348,9 +370,20 @@ const EventDetail = () => {
    {eventData.date}
    -

    +

    {eventData.title}

    + {/* Learn More Button - THIS IS THE NEW ADDITION */} + {eventData.learnMoreLink && eventData.learnMoreLink.trim() !== '' && ( + + )}
    From
    diff --git a/src/components/events/MedicalEventsComponent.tsx b/src/components/events/MedicalEventsComponent.tsx index 98a8bbc..9a10da2 100644 --- a/src/components/events/MedicalEventsComponent.tsx +++ b/src/components/events/MedicalEventsComponent.tsx @@ -3,68 +3,130 @@ import React, { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { ChevronRight } from 'lucide-react'; import Link from "next/link"; -import { eventAPI, Event } from '../../lib/api'; // Adjust path as needed +import { eventAPI, Event } from '../../lib/api'; +import { educationService, Course } from '../../services/educationService'; + +// Combined type for events and training programs +type DisplayItem = + | (Event & { type: 'event'; itemDate: Date }) + | (Course & { + type: 'training'; + itemDate: Date; + mainImage: string; + date: string; // Add this field + detail: string; + galleryImages?: string[]; + venue?: any[] + }); const MedicalEventsComponent = () => { const [selectedPeriod, setSelectedPeriod] = useState('Upcoming Events'); const [activeTab, setActiveTab] = useState('Upcoming Events'); - const [upcomingEvents, setUpcomingEvents] = useState([]); - const [pastEvents, setPastEvents] = useState([]); - const [nextEvent, setNextEvent] = useState(null); + const [upcomingItems, setUpcomingItems] = useState([]); + const [pastItems, setPastItems] = useState([]); + const [nextItem, setNextItem] = useState(null); const [loading, setLoading] = useState(true); const [searchTerm, setSearchTerm] = useState(''); const router = useRouter(); useEffect(() => { - loadEvents(); + loadData(); }, []); - const loadEvents = async () => { + const loadData = async () => { try { setLoading(true); - const [upcoming, past] = await Promise.all([ - eventAPI.getUpcomingEvents(), - eventAPI.getPastEvents() + const [events, trainingPrograms] = await Promise.all([ + eventAPI.getAllEvents(), // Get all events (both upcoming and past) + educationService.getActiveCourses() // Get all training programs ]); - setUpcomingEvents(upcoming); - setPastEvents(past); + const currentDate = new Date(); + currentDate.setHours(0, 0, 0, 0); // Set to start of day for accurate comparison - // Set the next event (first upcoming event) + // Transform events with type + const eventsWithType: DisplayItem[] = events.map(event => { + const eventDate = new Date(event.date); + return { + ...event, + type: 'event' as const, + itemDate: eventDate + }; + }); + + // Transform training programs (courses) with type + const trainingWithType: DisplayItem[] = trainingPrograms.map(course => { + const courseDate = course.startDate ? new Date(course.startDate) : new Date(); + return { + ...course, + type: 'training' as const, + itemDate: courseDate, + mainImage: course.image, + detail: `${course.duration} | ${course.seats} seats available | Led by ${course.instructor}`, + galleryImages: [], // Training programs don't have gallery images + date: course.startDate || 'Date TBD' + }; + }); + + // Combine all items (events + training programs) + const allItems = [...eventsWithType, ...trainingWithType]; + + // Separate into upcoming and past based on date + const upcoming = allItems + .filter(item => item.itemDate >= currentDate) + .sort((a, b) => a.itemDate.getTime() - b.itemDate.getTime()); + + const past = allItems + .filter(item => item.itemDate < currentDate) + .sort((a, b) => b.itemDate.getTime() - a.itemDate.getTime()); // Most recent first + + setUpcomingItems(upcoming); + setPastItems(past); + + // Set the next item (first upcoming item) if (upcoming.length > 0) { - setNextEvent(upcoming[0]); + setNextItem(upcoming[0]); } } catch (error) { - console.error('Error loading events:', error); + console.error('Error loading data:', error); } finally { setLoading(false); } }; - // Filter events based on search term - const filteredEvents = () => { - const events = activeTab === 'Upcoming Events' ? upcomingEvents : pastEvents; - if (!searchTerm) return events; + // Filter items based on search term and active tab + const filteredItems = () => { + const items = activeTab === 'Upcoming Events' ? upcomingItems : pastItems; + if (!searchTerm) return items; - return events.filter(event => - event.title.toLowerCase().includes(searchTerm.toLowerCase()) || - event.description.toLowerCase().includes(searchTerm.toLowerCase()) || - event.subject.toLowerCase().includes(searchTerm.toLowerCase()) + return items.filter(item => + item.title.toLowerCase().includes(searchTerm.toLowerCase()) || + item.description.toLowerCase().includes(searchTerm.toLowerCase()) ); }; - // Navigation function for App Router - const navigateToEventDetail = (eventId: string | number) => { - router.push(`/event-detail/${eventId}`); + // Navigation function + const navigateToDetail = (item: DisplayItem) => { + if (item.type === 'event') { + router.push(`/event-detail/${item.id}`); + } else { + // For training programs, navigate to course detail + router.push(`/education-training/course-detail?id=${item.id}`); + } }; - // Format price display from fees - const formatPrice = (event: Event) => { - if (event.fee && event.fee.length > 0) { - return `₹${event.fee[0].cost} per seat`; + // Format price display + const formatPrice = (item: DisplayItem) => { + if (item.type === 'event') { + if (item.fee && item.fee.length > 0) { + return `₹${item.fee[0].cost} per seat`; + } + return '₹1,800 per seat'; + } else { + // Training program + return item.price !== 'N/A' ? item.price : 'Contact for pricing'; } - return '₹1,800 per seat'; // fallback price }; // Get safe image URL with fallback @@ -72,8 +134,8 @@ const MedicalEventsComponent = () => { return imageUrl && imageUrl.trim() !== '' ? imageUrl : fallback; }; - // Get gallery images with fallbacks - const getGalleryImages = (galleryImages: string[] | undefined) => { + // Get gallery images with fallbacks - only for events, not training programs + const getGalleryImages = (item: DisplayItem) => { const fallbackImages = [ 'https://images.unsplash.com/photo-1551601651-2a8555f1a136?w=200&h=100&fit=crop', 'https://images.unsplash.com/photo-1582750433449-648ed127bb54?w=200&h=100&fit=crop', @@ -81,6 +143,13 @@ const MedicalEventsComponent = () => { 'https://images.unsplash.com/photo-1551601651-2a8555f1a136?w=200&h=100&fit=crop' ]; + if (item.type === 'training') { + // Training programs don't have gallery images + return []; + } + + const galleryImages = item.galleryImages; + if (!galleryImages || galleryImages.length === 0) { return fallbackImages; } @@ -97,7 +166,7 @@ const MedicalEventsComponent = () => { if (loading) { return (
    -
    Loading events...
    +
    Loading events and training programs...
    ); } @@ -129,7 +198,7 @@ const MedicalEventsComponent = () => {

    - Discover upcoming medical conferences, workshops, and professional development events + Discover upcoming medical conferences, workshops, training programs and professional development events

    @@ -164,7 +233,7 @@ const MedicalEventsComponent = () => {
    setSearchTerm(e.target.value)} className="border rounded-lg px-4 py-2 pl-4 pr-10 text-sm focus:outline-none w-full" @@ -184,20 +253,34 @@ const MedicalEventsComponent = () => {
    - {/* Next Event Hero Section */} - {nextEvent && ( + {/* Next Item Hero Section */} + {nextItem && (
    -

    Next Event

    +

    + Next {nextItem.type === 'training' ? 'Training Program' : 'Event'} +

    navigateToEventDetail(nextEvent.id)} + onClick={() => navigateToDetail(nextItem)} >
    {nextEvent.title} + {/* Type Badge */} +
    + + {nextItem.type === 'event' ? 'Event' : 'Training Program'} + +
    @@ -207,26 +290,30 @@ const MedicalEventsComponent = () => {
    -
    {nextEvent.date}
    +
    + {nextItem.type === 'event' ? nextItem.date : (nextItem.date || 'Date TBD')} +
    - {nextEvent.title} + {nextItem.title}
    - {nextEvent.description} + {nextItem.description}
    - {nextEvent.detail} + {nextItem.detail || (nextItem.type === 'event' ? nextItem.detail : '')}
    - Share Event -
    -
    - 📍 {nextEvent.venue?.[0]?.address || 'Convention Center, Medical District'} + Share {nextItem.type === 'training' ? 'Training Program' : 'Event'}
    + {nextItem.type === 'event' && ( +
    + 📍 {nextItem.venue?.[0]?.address || 'Convention Center, Medical District'} +
    + )}
    @@ -238,15 +325,17 @@ const MedicalEventsComponent = () => { }} onClick={(e) => { e.stopPropagation(); - console.log('Book seat clicked'); + navigateToDetail(nextItem); }} > - Book Your Seat + {nextItem.type === 'training' ? 'Register Now' : 'Book Your Seat'} -
    {formatPrice(nextEvent)}
    -
    - Early bird discount available -
    +
    {formatPrice(nextItem)}
    + {nextItem.type === 'event' && ( +
    + Early bird discount available +
    + )}
    @@ -272,7 +361,7 @@ const MedicalEventsComponent = () => { color: activeTab === 'Upcoming Events' ? '#012068' : '#012068' }} > - Upcoming Events ({upcomingEvents.length}) + Upcoming Events ({upcomingItems.length})
    - {/* Event Rows */} + {/* Item Rows */}
    - {filteredEvents().length === 0 ? ( + {filteredItems().length === 0 ? (
    -

    No events found.

    +

    No items found.

    ) : ( - filteredEvents().map((event) => ( -
    navigateToEventDetail(event.id)} - > -
    - {/* Images Section */} -
    - {/* Main image */} -
    - {event.title} + filteredItems().map((item) => { + const galleryImages = getGalleryImages(item); + const showGallery = item.type === 'event' && galleryImages.length > 0; + + return ( +
    navigateToDetail(item)} + > +
    + {/* Images Section */} +
    + {/* Main image */} +
    + {item.title} + {/* Type Badge */} +
    + + {item.type === 'event' ? 'Event' : 'Training'} + +
    +
    + + {/* Gallery grid - only for events */} + {showGallery && ( +
    + {galleryImages.map((img, index) => ( +
    + {`${item.title} +
    + ))} +
    + )}
    - {/* Gallery grid */} -
    - {getGalleryImages(event.galleryImages).map((img, index) => ( -
    - {`${event.title} -
    - ))} -
    -
    - - {/* Event details */} -
    -
    - {event.date} -
    -
    - {event.title} -
    -
    - {event.description} -
    -
    - {event.detail} -
    -
    - - | - - {formatPrice(event)} - + {/* Item details */} +
    +
    + {item.type === 'event' ? item.date : item.date} +
    +
    + {item.title} +
    +
    + {item.description} +
    +
    + {item.type === 'event' ? item.detail : item.detail} +
    +
    + + | + + {formatPrice(item)} + +
    -
    - )) + ); + }) )}
    @@ -374,35 +482,38 @@ const MedicalEventsComponent = () => { Recent Past Events
    - {pastEvents.slice(0, 2).map((event) => ( -
    navigateToEventDetail(event.id)} - > -
    - {event.title} -
    -
    -
    - {event.date} + {pastItems.filter(item => item.type === 'event').slice(0, 2).map((item) => { + const event = item as Event & { type: 'event'; itemDate: Date }; + return ( +
    router.push(`/event-detail/${event.id}`)} + > +
    + {event.title}
    -
    - {event.title} -
    -
    - {event.description} -
    -
    - {event.detail} +
    +
    + {event.date} +
    +
    + {event.title} +
    +
    + {event.description} +
    +
    + {event.detail} +
    -
    - ))} + ); + })}
    diff --git a/src/components/faculty/TeamListing.tsx b/src/components/faculty/TeamListing.tsx index da67a9a..683c0ce 100644 --- a/src/components/faculty/TeamListing.tsx +++ b/src/components/faculty/TeamListing.tsx @@ -249,7 +249,7 @@ const TeamListing: React.FC = ({

    - 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)} > {event.title} {/* 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)} >
    {featuredEvent.title} + {/* 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[]; }