diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index 52ec5403..215b8b15 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -5,7 +5,7 @@ import NewContent from "@/components/landing-page/new-content"; import PopularContent from "@/components/landing-page/popular-content"; import ContentCategory from "@/components/landing-page/content-category"; import Coverage from "@/components/landing-page/coverage"; -import Navbar from "@/components/landing-page/navbar"; +import Navbar from "@/components/landing-page/Navbar"; import Hero from "@/components/landing-page/hero"; import Footer from "@/components/landing-page/footer"; import Division from "@/components/landing-page/division"; @@ -16,8 +16,9 @@ const Home = ({ params: { locale } }: { params: { locale: string } }) => { - - + + + {/* */} diff --git a/components/landing-page/Hero.tsx b/components/landing-page/Hero.tsx index 5db61cc1..48f13719 100644 --- a/components/landing-page/Hero.tsx +++ b/components/landing-page/Hero.tsx @@ -1,122 +1,80 @@ -import { textEllipsis } from "@/utils/globals"; +import { formatDateToIndonesian, textEllipsis } from "@/utils/globals"; import React, { useEffect, useState } from "react"; import { Swiper, SwiperSlide } from "swiper/react"; import "swiper/css/bundle"; +import { getHeroData } from "@/service/landing/landing"; +import Link from "next/link"; +import { useParams, usePathname, useRouter } from "next/navigation"; const Hero: React.FC = () => { + const router = useRouter(); + const pathname = usePathname(); + const params = useParams(); + const locale = params?.locale; + + const [heroData, setHeroData] = useState(); + useEffect(() => { + initFetch(); + }, []); + const initFetch = async () => { + const response = await getHeroData(); + console.log(response); + setHeroData(response?.data?.data?.content); + }; return (
{/* Section Gambar Utama */} -
+
console.log("slide change")} onSwiper={(swiper) => console.log(swiper)}> - -
- Gambar Utama -
- Liputan Kegiatan -

Divisi Humas Polri Siap Menuju Zona Integritas

-

15 Maret 2024 14:01 WIB |

+ {heroData?.map((list: any) => ( + +
+ Gambar Utama +
+ {list?.categoryName} + +

{list?.title}

+ + +

+ {formatDateToIndonesian(new Date(list?.createdAt))} {list?.timezone ? list?.timezone : "WIB"}|{" "} + + + {" "} + {list?.clickCount}{" "} +

+
-
- - -
- Gambar Utama -
- Liputan Kegiatan -

Divisi Humas Polri Siap Menuju Zona Integritas

-

15 Maret 2024 14:01 WIB |

-
-
-
- -
- Gambar Utama -
- Liputan Kegiatan -

Divisi Humas Polri Siap Menuju Zona Integritas

-

15 Maret 2024 14:01 WIB |

-
-
-
- -
- Gambar Utama -
- Liputan Kegiatan -

Divisi Humas Polri Siap Menuju Zona Integritas

-

- 15 Maret 2024 14:01 WIB |{" "} - - - {" "} - 633{" "} -

-
-
-
+ + ))}
{/* Section Kanan */}
    - {[ - { - label: "OPS MANTAP PRAJA & PILKADA 2024", - title: "Doa Bersama Lintas Agama Jelang Pilkada di Papua", - time: "26 November 2024 16:33 WIT", - views: 13, - src: "https://mediahub.polri.go.id/api/media/view?id=113865&operation=thumbnail&isSmall=true¤tMilis=1732784412735", - }, - { - label: "OPS MANTAP PRAJA & PILKADA 2024", - title: "Potret Pengawalan Distribusi Logistik Pilkada ke Distrik-distrik di Kabupaten Yahukimo", - time: "26 November 2024 16:29 WIT", - views: 29, - src: "https://mediahub.polri.go.id/api/media/view?id=113948&operation=thumbnail&isSmall=true¤tMilis=1732784412735", - }, - { - label: "INFOGRAFIS", - title: "Dirgahayu ke-62 Seskoal", - time: "26 November 2024 16:26 WIB", - views: 2, - src: "https://mediahub.polri.go.id/api/media/view?id=113624&operation=thumbnail&isSmall=true¤tMilis=1732784412736", - }, - { - label: "UNGKAP KASUS", - title: "Evakuasi 30 Korban Kecelakaan Maut Truk di Tolikara", - time: "26 November 2024 16:25 WIT", - views: 26, - src: "https://mediahub.polri.go.id/api/media/view?id=113815&operation=thumbnail&isSmall=true¤tMilis=1732784412736", - }, - { - label: "UNGKAP KASUS", - title: "Evakuasi 30 Korban Kecelakaan Maut Truk di Tolikara", - time: "26 November 2024 16:25 WIT", - views: 26, - src: "https://mediahub.polri.go.id/api/media/view?id=113815&operation=thumbnail&isSmall=true¤tMilis=1732784412736", - }, - ].map((item, index) => ( -
  • + {heroData?.map((item: any) => ( +
  • - {item.title} + {item?.title}
    - {item.label} -

    {textEllipsis(item.title, 30)}

    + {item?.categoryName} + +

    {textEllipsis(item?.title, 30)}

    +

    - {item.time} |{" "} + {formatDateToIndonesian(new Date(item?.createdAt))} {item?.timezone ? item?.timezone : "WIB"} |{" "} {" "} - {item.views} + {item?.clickCount}

  • diff --git a/components/landing-page/content-category.tsx b/components/landing-page/content-category.tsx index 26fbbe3b..581a963c 100644 --- a/components/landing-page/content-category.tsx +++ b/components/landing-page/content-category.tsx @@ -1,69 +1,17 @@ +import { getCategoryData } from "@/service/landing/landing"; import Link from "next/link"; -import React from "react"; +import React, { useEffect, useState } from "react"; const ContentCategory = () => { - const categories = [ - { - id: 1, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 2, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=128¤tMilis=1732769540018", - title: "OPS LILIN NATARU 2024", - }, - { - id: 3, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 4, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 5, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 6, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 7, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 8, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 9, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 10, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 11, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - { - id: 12, - thumbnail: "https://mediahub.polri.go.id/api/media/categories/view-thumbnail?id=125¤tMilis=1732769540018", - title: "PON XXI", - }, - ]; + const [categories, setCategories] = useState(); + useEffect(() => { + initFetch(); + }, []); + const initFetch = async () => { + const response = await getCategoryData(); + console.log("category",response); + setCategories(response?.data?.data?.content); + }; return (
    @@ -73,11 +21,11 @@ const ContentCategory = () => {
    - {categories.map((category) => ( - - + {categories?.map((category: any) => ( + +
    -

    {category.title}

    +

    {category?.name}

    ))} diff --git a/components/landing-page/new-content.tsx b/components/landing-page/new-content.tsx index 7ca9028d..e5d668c3 100644 --- a/components/landing-page/new-content.tsx +++ b/components/landing-page/new-content.tsx @@ -1,156 +1,38 @@ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { - Carousel, - CarouselContent, - CarouselItem, - CarouselNext, - CarouselPrevious, -} from "@/components/ui/carousel"; +import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@/components/ui/carousel"; import Link from "next/link"; import { useParams, usePathname, useRouter } from "next/navigation"; import { Icon } from "@iconify/react/dist/iconify.js"; -import { textEllipsis } from "@/utils/globals"; +import { formatDateToIndonesian, textEllipsis } from "@/utils/globals"; import { generateLocalizedPath } from "@/utils/globals"; +import { getListContent } from "@/service/landing/landing"; -const dummyImage = [ - { - id: 1, - thumbnail: "/assets/banner-sample.png", - date: "17 MEI 2024", - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - time: "18.00 WIB", - }, - { - id: 2, - thumbnail: "/assets/banner-sample.png", - date: "17 MEI 2024", - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - time: "18.00 WIB", - }, - { - id: 3, - thumbnail: "/assets/banner-sample.png", - date: "17 MEI 2024", - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - time: "18.00 WIB", - }, - { - id: 4, - thumbnail: "/assets/banner-sample.png", - date: "17 MEI 2024", - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - time: "18.00 WIB", - }, - { - id: 5, - thumbnail: "/assets/banner-sample.png", - date: "17 MEI 2024", - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - time: "18.00 WIB", - }, - { - id: 6, - thumbnail: "/assets/banner-sample.png", - date: "17 MEI 2024", - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - time: "18.00 WIB", - }, - { - id: 7, - thumbnail: "/assets/banner-sample.png", - date: "17 MEI 2024", - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - time: "18.00 WIB", - }, - { - id: 8, - thumbnail: "/assets/banner-sample.png", - date: "17 MEI 2024", - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - time: "18.00 WIB", - }, - { - id: 9, - thumbnail: "/assets/banner-sample.png", - date: "17 MEI 2024", - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - time: "18.00 WIB", - }, -]; - -const dummyDescription = [ - { - id: 1, - title: - "Kapolres Batam Berikan pengarahan pagi kepada para anggota dan staf yang terkait", - date: "28 November 2024", - time: "11.15 WIB", - duration: "00:24:55", - }, - { - id: 2, - title: - "Kapolres Lahat Himbau Cipta Kondisi Cooling System Pasca Pemungutan Suara Pilkada 2024", - date: "28 November 2024", - time: "11.15 WIB", - duration: "00:24:55", - }, - { - id: 3, - title: - "17 Ton Pupuk Bersubsidi yang Akan Diselewengkan ke Banyuasin Berhasil Digagalkan", - date: "28 November 2024", - time: "11.15 WIB", - duration: "00:24:55", - }, - { - id: 4, - title: - "Kapolda Sumsel Apelkan 1471 Personel Persiapan Pengamanan Pengawalan Tahan Pungut dan Hitung Suara", - date: "28 November 2024", - time: "11.15 WIB", - duration: "00:24:55", - }, - { - id: 5, - title: - "Polrestabes Palembang Berhasil Mengungkap Kasus Penganiayaan Berat di Ilir Barat II", - date: "28 November 2024", - time: "11.15 WIB", - duration: "00:24:55", - }, - { - id: 6, - title: "Tahapan Pilkada di Sumsel Berlangsung Kondusif", - date: "28 November 2024", - time: "11.15 WIB", - duration: "00:24:55", - }, -]; - -const NewContent = () => { +const NewContent = (props: { type: string }) => { + const [newContent, setNewContent] = useState(); const [selectedTab, setSelectedTab] = useState("video"); const router = useRouter(); const pathname = usePathname(); const params = useParams(); const locale = params?.locale; + useEffect(() => { + initFetch(); + }, [selectedTab]); + const initFetch = async () => { + const request = { sortBy: props.type == "popular" ? "clickCount" : "createdAt", contentTypeId: selectedTab == "image" ? "1" : selectedTab == "video" ? "2" : selectedTab == "text" ? "3" : selectedTab == "audio" ? "4" : "" }; + const response = await getListContent(request); + console.log("category", response); + setNewContent(response?.data?.data?.content); + }; + return (

    - Konten Terbaru + Konten  + {props.type == "popular" ? "Populer" : "Terbaru"}

    @@ -173,7 +55,7 @@ const NewContent = () => { Foto Teks @@ -183,125 +65,108 @@ const NewContent = () => {
    {selectedTab == "video" ? ( - - - {dummyImage.map((image) => ( - - - -
    -

    {image.title}

    -

    - {image.date} {image.time} | 518{" "} - - - {" "} -

    -
    - -
    - ))} -
    - - -
    + newContent?.length > 0 ? ( + + + {newContent?.map((video: any) => ( + + + +
    +

    {video?.title}

    +

    + {formatDateToIndonesian(new Date(video?.createdAt))} {video?.timezone ? video?.timezone : "WIB"} | {video.clickCount}{" "} + + + {" "} +

    +
    + +
    + ))} +
    + + +
    + ) : ( +

    No Data

    + ) ) : selectedTab == "audio" ? ( - - - {dummyDescription.map((description) => ( - -
    - -
    - - - -
    + newContent?.length > 0 ? ( + + + {newContent?.map((audio: any) => ( + +
    + +
    + + + +
    -
    - - ))} - - - - - ) : selectedTab == "image" ? ( - - - {dummyImage.map((image) => ( - - - -
    -

    {image.title}

    -

    - {image.date} {image.time} | 518{" "} - - - {" "} -

    +
    - -
    - ))} -
    - - -
    - ) : ( + + ))} + + + + + ) : ( +

    No Data

    + ) + ) : selectedTab == "image" ? ( + newContent?.length > 0 ? ( + + + {newContent?.map((image: any) => ( + + + +
    +

    {image?.title}

    +

    + {formatDateToIndonesian(new Date(image?.createdAt))} {image?.timezone ? image?.timezone : "WIB"}| {image?.clickCount}{" "} + + + {" "} +

    +
    + +
    + ))} +
    + + +
    + ) : ( +

    No Data

    + ) + ) : newContent.length > 0 ? ( - {dummyImage.map((description) => ( - + {newContent?.map((text: any) => ( +
    - +
    - + {
    - {description.date} |{" "} - {" "} - 518 -
    -
    - {textEllipsis(description.title, 50)} + {formatDateToIndonesian(new Date(text?.createdAt))} {text?.timezone ? text?.timezone : "WIB"} | {text?.clickCount}{" "}
    +
    {textEllipsis(text?.title, 50)}
    - - + + Download Dokumen
    @@ -341,14 +194,13 @@ const NewContent = () => { + ) : ( +

    No Data

    )}
    - + LIHAT SEMUA
    diff --git a/service/landing/landing.ts b/service/landing/landing.ts new file mode 100644 index 00000000..1176bed4 --- /dev/null +++ b/service/landing/landing.ts @@ -0,0 +1,13 @@ +import { httpGetInterceptor } from "../http-config/http-interceptor-service"; + +export async function getHeroData() { + return await httpGetInterceptor(`media/public/list?enablePage=1&sort=desc&sortBy=createdAt&size=5&page=0&typeId=1&title=&categoryId=&fileFormats=&tags=&group=&startDate=&endDate=&month=&year=`); +} + +export async function getCategoryData() { + return await httpGetInterceptor(`media/categories/list/publish?enablePage=1&sort=desc&sortBy=updatedAt&size=12&type=`); +} + +export async function getListContent(data:{sortBy: string, contentTypeId: string}) { + return await httpGetInterceptor(`media/public/list?enablePage=1&sort=desc&sortBy=${data.sortBy}&size=5&page=0&typeId=${data.contentTypeId}&title=&categoryId=&fileFormats=&tags=&group=&startDate=&endDate=&month=&year=`); +} diff --git a/utils/globals.tsx b/utils/globals.tsx index cde194da..2d7e5386 100644 --- a/utils/globals.tsx +++ b/utils/globals.tsx @@ -1,3 +1,8 @@ +import { format } from "date-fns"; +import { id, tr } from "date-fns/locale"; + + + export const generateLocalizedPath = (href: string, locale: string): string => { if (href.startsWith(`/${locale}`)) { return href; @@ -16,4 +21,13 @@ export function textEllipsis(str: string, maxLength: number, { side = "end", ell } } return str; +}; + +export function formatDateToIndonesian(d: Date) { + try { + const dateString = format(d, "d MMMM yyyy HH:mm", { locale: id }); + return dateString; + } catch (error) { + return ""; + } }