From 801a7bb65cf488e2836c3973f3872ebf6e3e3246 Mon Sep 17 00:00:00 2001 From: Billy Marcello <145271272+BeLieM@users.noreply.github.com> Date: Sun, 28 Dec 2025 20:11:57 +0700 Subject: [PATCH] pending: implement new feedback design (ongoing) --- src/Pages/Landing.tsx | 167 ++++++++++++++++++++++++++++++------------ 1 file changed, 119 insertions(+), 48 deletions(-) diff --git a/src/Pages/Landing.tsx b/src/Pages/Landing.tsx index 422c9d6..59d4be3 100644 --- a/src/Pages/Landing.tsx +++ b/src/Pages/Landing.tsx @@ -1,24 +1,37 @@ import Navbar from "../Layout/Navbar"; import team from "../assets/teamwokr.jpg"; -import person1 from "../assets/reihan.jpeg"; -import person2 from "../assets/yohanes.jpeg"; -import person3 from "../assets/shafa.jpeg"; -import person4 from "../assets/reinhard.jpeg"; import bghero1 from "../assets/hero1.png"; import Footer from "../Layout/Footer"; import Faq from "../Layout/Faq"; import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; +type Internship = { + id: string; + posisi: string; + image_path: string; + status_lowongan: string; +}; + +type Feedback = { + id: number; + nama: string; + universitas: string; + pesan: string; + batch: number; + posisi: string; + tahun: number; + image_path: string; + created_at: string; +}; + const Landing = () => { const [search, setSearch] = useState(""); const navigate = useNavigate(); - type Internship = { - id: string; - posisi: string; - image_path: string; - status_lowongan: string; - }; + + const [internships, setInternships] = useState([]); + const [feedbacks, setFeedbacks] = useState([]); + const [activeIndex, setActiveIndex] = useState(0); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); @@ -27,9 +40,11 @@ const Landing = () => { } }; - const [internships, setInternships] = useState([]); + const getFeedbackImageUrl = (path: string) => + `${import.meta.env.VITE_API_BASE_URL}${path}`; useEffect(() => { + // Fetch internships fetch(`${import.meta.env.VITE_API_BASE_URL}/lowongan-magang-api/get`) .then((res) => res.json()) .then((data) => { @@ -38,7 +53,28 @@ const Landing = () => { .catch((error) => { console.error("Error fetching internships:", error); }); + + // Fetch feedback + fetch(`${import.meta.env.VITE_API_BASE_URL}/feedback-api/get`) + .then((res) => res.json()) + .then((data) => { + setFeedbacks(data.data as Feedback[]); + setActiveIndex(0); + }) + .catch((err) => console.error("Error fetching feedback:", err)); }, []); + + // Auto slide testimonial + useEffect(() => { + if (feedbacks.length === 0) return; + + const intervalId = setInterval(() => { + setActiveIndex((prev) => (prev + 1) % feedbacks.length); + }, 5000); // 5 detik + + return () => clearInterval(intervalId); + }, [feedbacks.length]); + return (
@@ -120,45 +156,80 @@ const Landing = () => {
{/* Hero 3 Section */} -
-
- - - - -
+ {feedbacks.length > 0 && ( +
+
+ {/* LEFT: big + small image */} +
+ {feedbacks[activeIndex].nama} -
-

- Kata mereka tentang Humic Engineering -

-

- Humic engineering menjadi tempat yang menyenangkan bagi saya, karena - dapat meningkatkan kemampuan saya dalam melakukan desain UI/UX. - Banyak pembelajaran yang berharga serta memiliki lingkungan yang - suportif -

-

- Reinhard, Humic Internship Batch 3 2025 -

+ {feedbacks.length > 1 && ( + {feedbacks[(activeIndex + )} +
+ + {/* RIGHT: text + thumbnails */} +
+
+

+ Kata mereka tentang Humic Engineering +

+ +

+ +

+ {feedbacks[activeIndex].nama},{" "} + + {feedbacks[activeIndex].posisi} ยท Humic Internship Batch{" "} + {feedbacks[activeIndex].batch}{" "} + {feedbacks[activeIndex].tahun} + +

+ +

+ {feedbacks[activeIndex].universitas} +

+
+ +
+ {feedbacks.map((fb, index) => ( + + ))} +
+
+
-
+ )} {/* Hero 4 Section */}