Skip to content

Commit 7039947

Browse files
committed
added events api
1 parent e068f5c commit 7039947

File tree

16 files changed

+249
-92
lines changed

16 files changed

+249
-92
lines changed

constants.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,6 @@ export const initialEdges = [
107107
{ id: "e11", source: "summer-intern", target: "si-2024" },
108108
{ id: "e12", source: "summer-intern", target: "si-2025" },
109109
];
110+
111+
export const defaultImageUrl = "https://images.unsplash.com/photo-1669352311123-085520652a65?q=80&w=2071&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D";
112+

src/app/api/postform/route.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// app/api/events/postform/route.ts
2+
import { NextRequest, NextResponse } from "next/server";
3+
import axios from "axios";
4+
5+
export async function POST(req: NextRequest) {
6+
console.log("Route /api/events/postform hit");
7+
8+
const { formData } = await req.json();
9+
console.log("Received Form Data:", formData);
10+
11+
try {
12+
const response = await axios.post(
13+
"https://discoverwithsac-bitspilani.in/2025/main/api/contact/",
14+
formData,
15+
{
16+
headers: {
17+
"Content-Type": "application/json",
18+
},
19+
}
20+
);
21+
22+
console.log("API Response:", response.data);
23+
return NextResponse.json({ success: true, message: "Form submitted!" });
24+
} catch (error) {
25+
console.error("Error sending form data:", error);
26+
return NextResponse.json(
27+
{ success: false, message: "Submission failed" },
28+
{ status: 500 }
29+
);
30+
}
31+
}

src/app/blogs/[blogId]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ const SingleResourcePage = ({ params }: PageProps) => {
7070
</div>
7171

7272
</div>
73-
<div className="mt-8 px-10">
73+
<div className="mt-8 px-10 pb-40">
7474
{currentBlogPost.comments_enabled && currentBlogPost.comments && (
7575
<CommentsSection postId={Number(blogId)} />
7676
)}

src/app/events/[eventId]/page.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const SingleEventPage = ({ params }: PageProps) => {
2222
const response = await axios.get("/api/getsingleevent", {
2323
params: { eventId }
2424
});
25-
console.log("here is the reponse", response.data)
25+
2626
setCurrentEvent(response.data as EventType);
2727
} catch (e) {
2828
console.log("There was some error", e);
@@ -41,7 +41,6 @@ const SingleEventPage = ({ params }: PageProps) => {
4141
</div>
4242
);
4343
}
44-
console.log(currentEvent)
4544

4645
return (
4746
<div className="w-full justify-center min-h-full">

src/app/events/page.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ const EventsPage = () => {
2929

3030
useEffect(() => {
3131
const getEvents = async () => {
32-
const data = await axios.get("/api/events")
33-
const res: EventType[] = await data.data
34-
setEvents(res)
32+
const { data } = await axios.get("/api/events")
33+
const sortedEvents: EventType[] = data.sort((a: EventType, b: EventType) => {
34+
return new Date(a.created_at).getTime() - new Date(b.created_at).getTime()
35+
})
36+
setEvents(sortedEvents)
37+
3538
}
3639
getEvents()
3740
// setEvents(undefined)

src/app/home/page.tsx

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,18 @@ import Image from "next/image";
33
import { Separator } from "@/components/ui/separator";
44
import ImageCarousel from "@/components/home/crousel";
55
import BlogCrousel from "@/components/home/blog-crousel";
6+
import EventsCrousel from "@/components/home/events-crousel";
67

78
const Home = () => {
89
const ResourceImage = [
9-
{ src: "/production/resources/r1.jpg" },
10-
{ src: "/production/resources/r2.png" },
11-
{ src: "/production/resources/r3.png" }
10+
{ src: "/production/resources/r1.jpg", link: `${process.env.NEXT_PUBLIC_FRONTEND_URL}/resources/101` },
11+
{ src: "/production/resources/r2.png", link: `${process.env.NEXT_PUBLIC_FRONTEND_URL}/resources/102` },
12+
{ src: "/production/resources/r3.png", link: `${process.env.NEXT_PUBLIC_FRONTEND_URL}/resources/103` }
1213
]
13-
const EventsImage = [
14-
{ src: "/production/events/e1.jpg" },
15-
{ src: "/production/events/e2.jpg" },
16-
{ src: "/production/events/enew.jpg" }
17-
]
18-
19-
// const finalImages = [
20-
// // `https://www.instagram.com/p/DEtr6QjJD0B/?utm_source=ig_web_copy_link&igsh=MzRlODBiNWFlZA==`
21-
// ]
2214

2315
return (
2416

25-
<div className="flex flex-col justify-center items-center mb-10">
17+
<div className="flex flex-col justify-center items-center mb-40">
2618
<div className="h-screen w-full bg-slate-200 -mt-24 relative">
2719
{" "}
2820
{/* negative margin to negate the effect of shifted navbar, value should be same as height of navbar */}
@@ -47,10 +39,7 @@ const Home = () => {
4739
</div>
4840
<div className="space-y-20">
4941
<ImageCarousel images={ResourceImage} autoPlayInterval={5000} />
50-
<div className="text-4xl font-bold text-center py-5 underline">
51-
Events
52-
</div>
53-
<ImageCarousel images={EventsImage} autoPlayInterval={5000} />
42+
<EventsCrousel />
5443
<BlogCrousel />
5544
</div>
5645
</div>

src/components/blogs/singular-blog.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, { ReactNode, useState } from "react";
22
import Image from "next/image";
3+
import { defaultImageUrl } from "../../../constants";
34

45
interface SingularBlogPostProps {
56
imageUrl: string;
@@ -28,7 +29,7 @@ const SingularBlogPost: React.FC<SingularBlogPostProps> = ({
2829
console.log(isValidUrl(imageUrl))
2930
console.log(imageUrl)
3031
// Default image URL to use when image is invalid or fails to load
31-
const defaultImageUrl = "https://images.unsplash.com/photo-1669352311123-085520652a65?q=80&w=2071&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D";
32+
3233

3334
// Determine which image URL to use
3435
const safeImageUrl = imgError || !isValidUrl(imageUrl) ? defaultImageUrl : imageUrl;

src/components/contact-page/contact-us-form.tsx

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,32 @@ import {
1717
FormMessage,
1818
} from "@/components/ui/form";
1919
import { Input } from "@/components/ui/input";
20+
import axios from "axios";
2021

2122
const ContactUsForm = () => {
2223
const form = useForm<formSchemaType>({
2324
resolver: zodResolver(formSchema),
2425
defaultValues: {
25-
username: "",
26+
name: "",
2627
email: "",
27-
queries: "",
28+
message: "",
2829
},
2930
});
3031

31-
const onSubmitForm = () => {
32+
const onSubmitForm = async (values: formSchemaType) => {
33+
try {
34+
const response = await axios.post("/api/postform", {
35+
formData: values,
36+
});
3237

38+
console.log("Success:", response.data);
39+
40+
} catch (error) {
41+
console.error("Submission failed:", error);
42+
43+
}
3344
};
45+
3446
return (
3547
<Form {...form}>
3648
<form onSubmit={form.handleSubmit(onSubmitForm)} className="space-y-8">
@@ -39,66 +51,60 @@ const ContactUsForm = () => {
3951
<CardTitle className="text-2xl text-center pb-4">
4052
Reach us out at :
4153
</CardTitle>
42-
<p className="text-center ">
43-
Feel free to leave your thoughts down below and we will respond
44-
and get in touch with you!!
54+
<p className="text-center">
55+
Feel free to leave your thoughts down below and we will respond and get in touch with you!!
4556
</p>
4657
</CardHeader>
4758
<CardContent className="flex flex-col gap-5">
4859
<FormField
4960
control={form.control}
50-
name="username"
61+
name="name"
5162
render={({ field }) => (
5263
<FormItem className="text-left space-y-0">
53-
<FormLabel className="w-fit mr p-0 text-lg">
54-
Name (Required){" "}
55-
</FormLabel>
64+
<FormLabel className="text-lg">Name (Required)</FormLabel>
5665
<FormControl>
5766
<Input
5867
className="bg-white text-black py-3"
5968
placeholder="Enter Your name here"
6069
{...field}
6170
/>
6271
</FormControl>
63-
6472
<FormMessage />
6573
</FormItem>
6674
)}
6775
/>
76+
6877
<FormField
6978
control={form.control}
7079
name="email"
7180
render={({ field }) => (
7281
<FormItem className="text-left space-y-0">
73-
<FormLabel className="text-left text-lg">
74-
Email (Required){" "}
75-
</FormLabel>
82+
<FormLabel className="text-lg">Email (Required)</FormLabel>
7683
<FormControl>
7784
<Input
7885
className="bg-white text-black py-3"
7986
placeholder="Enter Your Email here"
8087
{...field}
8188
/>
8289
</FormControl>
83-
8490
<FormMessage />
8591
</FormItem>
8692
)}
8793
/>
94+
8895
<FormField
8996
control={form.control}
90-
name="queries"
97+
name="message"
9198
render={({ field }) => (
9299
<FormItem className="text-left space-y-0">
93-
<FormLabel className="text-left text-lg">Queries </FormLabel>
100+
<FormLabel className="text-lg">Queries</FormLabel>
94101
<FormControl>
95102
<Textarea
96103
className="bg-white text-black h-16"
97104
placeholder="Enter Your Queries here"
98105
{...field}
99106
/>
100107
</FormControl>
101-
102108
<FormMessage />
103109
</FormItem>
104110
)}
@@ -108,7 +114,7 @@ const ContactUsForm = () => {
108114
type="submit"
109115
className="w-fit mx-auto bg-[#ffedb8] text-black font-semibold"
110116
>
111-
Save
117+
Submit
112118
</Button>
113119
</CardContent>
114120
</Card>

src/components/events-page/ImageCrouselHorizontal.tsx

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22
import { useState, useEffect } from 'react'
33
import Image from 'next/image'
44
import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselApi } from "@/components/ui/carousel"
5-
const imageList = [
6-
"/eventsTestImage.webp",
7-
"/eventsTestImage.webp",
8-
"/eventsTestImage.webp",
9-
]
5+
106
import { MoveUpRight } from 'lucide-react';
11-
import { EventType } from '@/types'
7+
import { EventType, Resources } from '@/types'
128
import Link from 'next/link'
9+
import { convertGoogleDriveUrl, getResourceArray, getSafeImageUrl } from '@/lib/utils'
1310
export default function ImageCarouselHorizontal({ event }: { event: EventType }) {
1411
const [current, setCurrent] = useState(0)
1512
const [count, setCount] = useState(0)
@@ -26,21 +23,27 @@ export default function ImageCarouselHorizontal({ event }: { event: EventType })
2623
}, [api])
2724
const title = event.title
2825
const description = event.description
29-
const resources = ["resource1", "resource2",]
26+
const resources: Resources[] = getResourceArray(event)
27+
const rawImages = event.image?.split(",").map(img => img.trim()).filter(Boolean) || [];
28+
const imageList = rawImages.map(ele => getSafeImageUrl(convertGoogleDriveUrl(ele)));
3029
return (
3130
<div className='flex gap-4 h-[220px] w-full relative '>
32-
<div className='bg-[#f2f2f2] p-4 h-[240px] rounded-xl relative border-2 w-[60%]'>
31+
<div className='bg-[#f2f2f2] p-4 h-[240px] rounded-xl relative border-2 w-[45%] flex-shrink-0'>
3332
<Carousel className='space-y-4 ' setApi={setApi}>
3433
{/* <div className='text-center text-xl border-b-2 border-black pb-5 w-fit mx-auto px-10'>
3534
Gallery
3635
</div> */}
3736
<CarouselContent>
3837
{imageList.map((src, index) => (
3938
<CarouselItem key={index} className='mx-auto'>
40-
<Image src={src} alt={`Gallery image ${index + 1}`}
41-
width={1000}
42-
height={0}
43-
className="h-[170px] w-auto mx-auto" />
39+
<div className="w-[290px] h-[170px] mx-auto relative rounded-lg overflow-hidden bg-white">
40+
<Image
41+
src={src}
42+
alt={`Gallery image ${index + 1}`}
43+
fill
44+
className="object-contain"
45+
/>
46+
</div>
4447
</CarouselItem>
4548
))}
4649
</CarouselContent>
@@ -72,9 +75,11 @@ export default function ImageCarouselHorizontal({ event }: { event: EventType })
7275
<div className='flex justify-between px-3 mt-auto'>
7376
{resources.map((ele, index) => {
7477
return (
75-
<div key={index} className='bg-[#d9d9d9] rounded-3xl py-2 px-10'>
76-
{ele}
77-
</div>
78+
<Link href={ele.link} key={index}>
79+
<div key={index} className='bg-[#d9d9d9] rounded-3xl py-2 px-10'>
80+
{ele.name}
81+
</div>
82+
</Link>
7883
)
7984
})}
8085
</div>

src/components/events-page/ImageCrouselMain.tsx

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@ import { useState, useEffect } from 'react'
44
import Image from 'next/image'
55
import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type CarouselApi } from "@/components/ui/carousel"
66
import { MoveUpRight } from 'lucide-react';
7-
const imageList = [
8-
"/eventsTestImage.webp",
9-
"/eventsTestImage.webp",
10-
"/eventsTestImage.webp"
11-
]
12-
import { EventType } from '@/types';
7+
8+
import { EventType, Resources } from '@/types';
139
import Link from 'next/link';
10+
import { convertGoogleDriveUrl, getResourceArray, getSafeImageUrl } from '@/lib/utils';
1411

1512
export default function ImageCarouselMain({ event }: { event: EventType }) {
1613
const [current, setCurrent] = useState(0)
@@ -32,7 +29,9 @@ export default function ImageCarouselMain({ event }: { event: EventType }) {
3229

3330
const title = event.title
3431
const description = event.description
35-
const resources = ["resource1", "resource2", "resource3"]
32+
const resources: Resources[] = getResourceArray(event)
33+
const rawImages = event.image?.split(",").map(img => img.trim()).filter(Boolean) || [];
34+
const imageList = rawImages.map(ele => getSafeImageUrl(convertGoogleDriveUrl(ele)));
3635
return (
3736
<div>
3837
<div className='relative bg-[#f2f2f2] p-10 pb-16 h-auto rounded-xl border-2'>
@@ -44,7 +43,14 @@ export default function ImageCarouselMain({ event }: { event: EventType }) {
4443
<CarouselContent>
4544
{imageList.map((src, index) => (
4645
<CarouselItem key={index} className='mx-auto'>
47-
<Image src={src} alt={`Gallery image ${index + 1}`} width={300} height={6} className='mx-auto' />
46+
<div className="w-[350px] h-[350px] mx-auto relative rounded-lg overflow-hidden bg-white">
47+
<Image
48+
src={src}
49+
alt={`Gallery image ${index + 1}`}
50+
fill
51+
className="object-contain"
52+
/>
53+
</div>
4854
</CarouselItem>
4955
))}
5056
</CarouselContent>
@@ -73,9 +79,11 @@ export default function ImageCarouselMain({ event }: { event: EventType }) {
7379
<div className='flex justify-between px-3 '>
7480
{resources.map((ele, index) => {
7581
return (
76-
<div key={index} className='bg-[#d9d9d9] rounded-3xl py-2 px-10'>
77-
{ele}
78-
</div>
82+
<Link href={ele.link} key={index}>
83+
<div key={index} className='bg-[#d9d9d9] rounded-3xl py-2 px-10'>
84+
{ele.name}
85+
</div>
86+
</Link>
7987
)
8088
})}
8189
</div>

0 commit comments

Comments
 (0)