Skip to content

Commit 581c6af

Browse files
--modifiaction in events page.tsx
1 parent 5e5e0a7 commit 581c6af

File tree

2 files changed

+68
-26
lines changed

2 files changed

+68
-26
lines changed

app/Events/page.tsx

Lines changed: 62 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import React, { useState, useEffect } from "react";
33
import NavBar from "../NavBar/page";
44
import Footer from "../Footer/page";
55
import { motion, AnimatePresence } from "framer-motion";
6-
import { sanity } from "@/lib/sanity"; // adjust path as needed
6+
import { sanity } from "@/lib/sanity";
77

88
interface EventType {
99
_id: string;
@@ -34,17 +34,27 @@ const query = `*[_type == "event"]{
3434
}
3535
}`;
3636

37-
const EventCard = ({ event }: { event: EventType }) => (
37+
const EventCard = ({
38+
event,
39+
expanded,
40+
onClick,
41+
}: {
42+
event: EventType;
43+
expanded: boolean;
44+
onClick: () => void;
45+
}) => (
3846
<motion.div
39-
className="bg-white/20 dark:bg-neutral-900/70 rounded-2xl shadow-xl overflow-hidden backdrop-blur-md border border-white/10 flex flex-col"
47+
className="bg-white/20 dark:bg-neutral-900/70 rounded-2xl shadow-xl overflow-hidden backdrop-blur-md border border-white/10 flex flex-col cursor-pointer transition-all"
4048
initial={{ opacity: 0, y: 40, scale: 0.95 }}
4149
animate={{ opacity: 1, y: 0, scale: 1 }}
4250
transition={{ duration: 0.5, type: "spring", stiffness: 120 }}
4351
whileHover={{
4452
scale: 1.03,
4553
boxShadow: "0 8px 32px 0 rgba(0,0,0,0.18)",
4654
}}
55+
onClick={onClick}
4756
>
57+
{/* Main event image */}
4858
{event.images && event.images[0]?.asset?.url && (
4959
<img
5060
src={event.images[0].asset.url}
@@ -60,18 +70,56 @@ const EventCard = ({ event }: { event: EventType }) => (
6070
<span>
6171
{event.date ? new Date(event.date).toLocaleDateString() : ""}
6272
</span>
63-
&middot; <span>{event.location}</span>
73+
{event.location && (
74+
<>
75+
&middot; <span>{event.location}</span>
76+
</>
77+
)}
6478
</div>
65-
<p className="text-gray-700 dark:text-gray-200 flex-1">
79+
<p className="text-gray-700 dark:text-gray-200 flex-1 mb-2">
6680
{event.description}
6781
</p>
82+
<AnimatePresence>
83+
{expanded && event.images && event.images.length > 1 && (
84+
<motion.div
85+
initial={{ height: 0, opacity: 0 }}
86+
animate={{ height: "auto", opacity: 1 }}
87+
exit={{ height: 0, opacity: 0 }}
88+
className="mt-4"
89+
>
90+
<div className="font-semibold text-white mb-2">Gallery:</div>
91+
<div className="grid grid-cols-2 sm:grid-cols-3 gap-2">
92+
{event.images.slice(1).map(
93+
(img, idx) =>
94+
img.asset?.url && (
95+
<img
96+
key={img.asset._id || idx}
97+
src={img.asset.url}
98+
alt={`Gallery image ${idx + 1}`}
99+
className="rounded-md border border-white/10 object-cover w-full h-28 sm:h-32"
100+
loading="lazy"
101+
/>
102+
)
103+
)}
104+
</div>
105+
</motion.div>
106+
)}
107+
</AnimatePresence>
108+
<div className="mt-4 text-primary font-semibold text-center">
109+
{expanded
110+
? "Click to collapse"
111+
: event.images && event.images.length > 1
112+
? "Click to view gallery"
113+
: ""}
114+
</div>
68115
</div>
69116
</motion.div>
70117
);
71118

72119
const EventsPage = () => {
73120
const [search, setSearch] = useState("");
74121
const [events, setEvents] = useState<EventType[]>([]);
122+
const [expandedId, setExpandedId] = useState<string | null>(null);
75123

76124
useEffect(() => {
77125
sanity.fetch(query).then(setEvents);
@@ -97,7 +145,7 @@ const EventsPage = () => {
97145
className="text-center mb-12"
98146
>
99147
<h1 className="text-4xl md:text-5xl font-extrabold text-white mb-3">
100-
Upcoming <span className="text-primary">Events</span>
148+
Past <span className="text-primary">Events</span>
101149
</h1>
102150
<p className="text-gray-200 max-w-2xl mx-auto">
103151
Stay updated with our latest events, workshops, and meetups.
@@ -116,7 +164,14 @@ const EventsPage = () => {
116164
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
117165
{filteredEvents.length > 0 ? (
118166
filteredEvents.map((event) => (
119-
<EventCard key={event._id} event={event} />
167+
<EventCard
168+
key={event._id}
169+
event={event}
170+
expanded={expandedId === event._id}
171+
onClick={() =>
172+
setExpandedId(expandedId === event._id ? null : event._id)
173+
}
174+
/>
120175
))
121176
) : (
122177
<motion.div

components/ui/anime-navbar.tsx

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export function AnimeNavBar({
5454
<div className={cn("fixed top-5 left-0 right-0 z-[9999]", className)}>
5555
<div className="flex justify-center pt-6">
5656
<motion.div
57-
className="flex items-center gap-3 bg-black/50 border border-white/10 backdrop-blur-lg py-2 px-2 rounded-full shadow-lg relative"
57+
className="flex items-center gap-2 bg-black/50 border border-white/10 backdrop-blur-lg py-2 px-2 rounded-full shadow-lg relative overflow-x-auto scrollbar-thin scrollbar-thumb-gray-700 scrollbar-track-transparent max-w-full"
5858
initial={{ y: -20, opacity: 0 }}
5959
animate={{ y: 0, opacity: 1 }}
6060
transition={{
@@ -75,7 +75,7 @@ export function AnimeNavBar({
7575
onMouseEnter={() => setHoveredTab(item.name)}
7676
onMouseLeave={() => setHoveredTab(null)}
7777
className={cn(
78-
"relative cursor-pointer text-sm font-semibold px-6 py-3 rounded-full transition-all duration-300",
78+
"relative cursor-pointer text-xs sm:text-sm font-semibold px-3 sm:px-6 py-2 sm:py-3 rounded-full transition-all duration-300 whitespace-nowrap",
7979
"text-white/70 hover:text-white",
8080
isActive && "text-white"
8181
)}
@@ -106,24 +106,11 @@ export function AnimeNavBar({
106106
</motion.div>
107107
)}
108108

109-
{/* Desktop Text */}
110-
<motion.span
111-
className="hidden md:inline relative z-10"
112-
initial={{ opacity: 0 }}
113-
animate={{ opacity: 1 }}
114-
transition={{ duration: 0.2 }}
115-
>
116-
{item.name}
117-
</motion.span>
118-
119-
{/* Mobile Icon */}
120-
<motion.span
121-
className="md:hidden relative z-10"
122-
whileHover={{ scale: 1.2 }}
123-
whileTap={{ scale: 0.9 }}
124-
>
109+
{/* Icon and Text always visible */}
110+
<span className="flex items-center gap-1 relative z-10">
125111
<Icon size={18} strokeWidth={2.5} />
126-
</motion.span>
112+
<span>{item.name}</span>
113+
</span>
127114

128115
{/* Hover Effect */}
129116
<AnimatePresence>

0 commit comments

Comments
 (0)