diff --git a/components/landing-page/headers-latest.tsx b/components/landing-page/headers-latest.tsx
index d0126a0..74b09e3 100644
--- a/components/landing-page/headers-latest.tsx
+++ b/components/landing-page/headers-latest.tsx
@@ -4,6 +4,7 @@ import { useEffect, useState } from "react";
import Image from "next/image";
import Link from "next/link";
import { getListArticle } from "@/service/article";
+import { getAdvertise } from "@/service/advertisement";
type Article = {
id: number;
@@ -17,6 +18,15 @@ type Article = {
files: { fileUrl: string; file_alt: string }[];
};
+type Advertise = {
+ id: number;
+ title: string;
+ description: string;
+ placement: string;
+ contentFileUrl: string;
+ redirectLink: string;
+};
+
export default function HeaderLatest() {
const [articles, setArticles] = useState([]);
const [page, setPage] = useState(1);
@@ -29,6 +39,36 @@ export default function HeaderLatest() {
endDate: null,
});
+ const [bannerAd, setBannerAd] = useState(null);
+
+ useEffect(() => {
+ initStateAdver();
+ }, []);
+
+ async function initStateAdver() {
+ const req = {
+ limit: 100,
+ page: 1,
+ sort: "desc",
+ sortBy: "created_at",
+ isPublish: true,
+ };
+
+ try {
+ const res = await getAdvertise(req);
+ const data: Advertise[] = res?.data?.data || [1];
+
+ // filter iklan dengan placement = "banner"
+ const banner = data.find((ad) => ad.placement === "jumbotron");
+
+ if (banner) {
+ setBannerAd(banner);
+ }
+ } catch (err) {
+ console.error("Error fetching advertisement:", err);
+ }
+ }
+
useEffect(() => {
initState();
}, [page, showData, startDateValue, selectedCategories]);
@@ -161,12 +201,32 @@ export default function HeaderLatest() {
diff --git a/components/landing-page/headers-opinion.tsx b/components/landing-page/headers-opinion.tsx
index ca40882..8e56741 100644
--- a/components/landing-page/headers-opinion.tsx
+++ b/components/landing-page/headers-opinion.tsx
@@ -4,6 +4,7 @@ import { useEffect, useState } from "react";
import Image from "next/image";
import Link from "next/link";
import { getListArticle } from "@/service/article";
+import { getAdvertise } from "@/service/advertisement";
type Article = {
id: number;
@@ -17,6 +18,15 @@ type Article = {
files: { fileUrl: string; file_alt: string }[];
};
+type Advertise = {
+ id: number;
+ title: string;
+ description: string;
+ placement: string;
+ contentFileUrl: string;
+ redirectLink: string;
+};
+
export default function HeaderOpinion() {
const [articles, setArticles] = useState([]);
const [page, setPage] = useState(1);
@@ -29,6 +39,36 @@ export default function HeaderOpinion() {
endDate: null,
});
+ const [bannerAd, setBannerAd] = useState(null);
+
+ useEffect(() => {
+ initStateAdver();
+ }, []);
+
+ async function initStateAdver() {
+ const req = {
+ limit: 100,
+ page: 1,
+ sort: "desc",
+ sortBy: "created_at",
+ isPublish: true,
+ };
+
+ try {
+ const res = await getAdvertise(req);
+ const data: Advertise[] = res?.data?.data || [1];
+
+ // filter iklan dengan placement = "banner"
+ const banner = data.find((ad) => ad.placement === "jumbotron");
+
+ if (banner) {
+ setBannerAd(banner);
+ }
+ } catch (err) {
+ console.error("Error fetching advertisement:", err);
+ }
+ }
+
useEffect(() => {
initState();
}, [page, showData, startDateValue, selectedCategories]);
@@ -160,12 +200,32 @@ export default function HeaderOpinion() {
diff --git a/components/landing-page/headers-peace.tsx b/components/landing-page/headers-peace.tsx
index 34c98ad..4dde7c2 100644
--- a/components/landing-page/headers-peace.tsx
+++ b/components/landing-page/headers-peace.tsx
@@ -4,6 +4,7 @@ import { useEffect, useState } from "react";
import Image from "next/image";
import Link from "next/link";
import { getListArticle } from "@/service/article";
+import { getAdvertise } from "@/service/advertisement";
type Article = {
id: number;
@@ -17,6 +18,15 @@ type Article = {
files: { fileUrl: string; file_alt: string }[];
};
+type Advertise = {
+ id: number;
+ title: string;
+ description: string;
+ placement: string;
+ contentFileUrl: string;
+ redirectLink: string;
+};
+
export default function HeaderPeace() {
const [articles, setArticles] = useState([]);
const [page, setPage] = useState(1);
@@ -29,6 +39,36 @@ export default function HeaderPeace() {
endDate: null,
});
+ const [bannerAd, setBannerAd] = useState(null);
+
+ useEffect(() => {
+ initStateAdver();
+ }, []);
+
+ async function initStateAdver() {
+ const req = {
+ limit: 100,
+ page: 1,
+ sort: "desc",
+ sortBy: "created_at",
+ isPublish: true,
+ };
+
+ try {
+ const res = await getAdvertise(req);
+ const data: Advertise[] = res?.data?.data || [1];
+
+ // filter iklan dengan placement = "banner"
+ const banner = data.find((ad) => ad.placement === "jumbotron");
+
+ if (banner) {
+ setBannerAd(banner);
+ }
+ } catch (err) {
+ console.error("Error fetching advertisement:", err);
+ }
+ }
+
useEffect(() => {
initState();
}, [page, showData, startDateValue, selectedCategories]);
@@ -160,12 +200,32 @@ export default function HeaderPeace() {
diff --git a/components/landing-page/headers-popular.tsx b/components/landing-page/headers-popular.tsx
index c281a2b..e704f65 100644
--- a/components/landing-page/headers-popular.tsx
+++ b/components/landing-page/headers-popular.tsx
@@ -4,6 +4,7 @@ import { useEffect, useState } from "react";
import Image from "next/image";
import Link from "next/link";
import { getListArticle } from "@/service/article";
+import { getAdvertise } from "@/service/advertisement";
type Article = {
id: number;
@@ -17,6 +18,15 @@ type Article = {
files: { fileUrl: string; file_alt: string }[];
};
+type Advertise = {
+ id: number;
+ title: string;
+ description: string;
+ placement: string;
+ contentFileUrl: string;
+ redirectLink: string;
+};
+
export default function HeaderPopular() {
const [articles, setArticles] = useState([]);
const [page, setPage] = useState(1);
@@ -29,6 +39,36 @@ export default function HeaderPopular() {
endDate: null,
});
+ const [bannerAd, setBannerAd] = useState(null);
+
+ useEffect(() => {
+ initStateAdver();
+ }, []);
+
+ async function initStateAdver() {
+ const req = {
+ limit: 100,
+ page: 1,
+ sort: "desc",
+ sortBy: "created_at",
+ isPublish: true,
+ };
+
+ try {
+ const res = await getAdvertise(req);
+ const data: Advertise[] = res?.data?.data || [1];
+
+ // filter iklan dengan placement = "banner"
+ const banner = data.find((ad) => ad.placement === "jumbotron");
+
+ if (banner) {
+ setBannerAd(banner);
+ }
+ } catch (err) {
+ console.error("Error fetching advertisement:", err);
+ }
+ }
+
useEffect(() => {
initState();
}, [page, showData, startDateValue, selectedCategories]);
@@ -160,12 +200,32 @@ export default function HeaderPopular() {
diff --git a/components/landing-page/headers.tsx b/components/landing-page/headers.tsx index db0bdbc..27f9098 100644 --- a/components/landing-page/headers.tsx +++ b/components/landing-page/headers.tsx @@ -12,6 +12,7 @@ type Article = { categoryName: string; createdAt: string; createdByName: string; + customCreatorName: string; thumbnailUrl: string; categories: { title: string; @@ -87,7 +88,7 @@ export default function Beranda() { {item.title}
- {item.createdByName}
+ {item.createdByName || item?.customCreatorName}
{new Date(item.createdAt).toLocaleDateString("en-US", {
month: "long",
diff --git a/components/landing-page/lifestyle.tsx b/components/landing-page/lifestyle.tsx
index 86ba51f..46e83fd 100644
--- a/components/landing-page/lifestyle.tsx
+++ b/components/landing-page/lifestyle.tsx
@@ -7,6 +7,7 @@ import { getListArticle } from "@/service/article";
import { CommentIcon } from "../icons/sidebar-icon";
import { Button } from "../ui/button";
import { MessageCircle } from "lucide-react";
+import { getAdvertise } from "@/service/advertisement";
type Article = {
id: number;
@@ -15,10 +16,20 @@ type Article = {
categoryName: string;
createdAt: string;
createdByName: string;
+ customCreatorName: string;
thumbnailUrl: string;
categories: { title: string }[];
};
+type Advertise = {
+ id: number;
+ title: string;
+ description: string;
+ placement: string;
+ contentFileUrl: string;
+ redirectLink: string;
+};
+
export default function Lifestyle() {
const [page, setPage] = useState(1);
const [totalPage, setTotalPage] = useState(1);
@@ -32,6 +43,36 @@ export default function Lifestyle() {
endDate: null,
});
+ const [bannerAd, setBannerAd] = useState
- {item.createdByName} + {item.createdByName || item?.customCreatorName} {new Date(item.createdAt).toLocaleDateString("en-US", { month: "long", @@ -105,13 +145,33 @@ export default function OnTheSpot() { ))}