From b287069d302a5af6c16cc65566ee5cf11d81b0eb Mon Sep 17 00:00:00 2001 From: Anang Yusman Date: Tue, 13 Jan 2026 17:52:13 +0800 Subject: [PATCH] update --- components/details/details-content.tsx | 85 +++++++++++-------- components/form/article/edit-article-form.tsx | 68 ++++++++++----- components/ui/input.tsx | 8 +- service/article.ts | 7 ++ 4 files changed, 105 insertions(+), 63 deletions(-) diff --git a/components/details/details-content.tsx b/components/details/details-content.tsx index 0bac399..38f1737 100644 --- a/components/details/details-content.tsx +++ b/components/details/details-content.tsx @@ -6,6 +6,7 @@ import Link from "next/link"; import { getArticleById, getArticleBySlug, + getArticleFiles, getListArticle, } from "@/service/article"; import { close, error, loading } from "@/config/swal"; @@ -77,7 +78,9 @@ export default function DetailContent() { startDate: null, endDate: null, }); - const [detailfiles, setDetailFiles] = useState([]); + // const [detailfiles, setDetailFiles] = useState([]); + const [detailFiles, setDetailFiles] = useState([]); + const [mainImage, setMainImage] = useState(0); const [thumbnail, setThumbnail] = useState("-"); const [diseId, setDiseId] = useState(0); @@ -299,25 +302,40 @@ export default function DetailContent() { initStateData(); }, [listCategory]); + useEffect(() => { + setSelectedIndex(0); + }, [detailFiles]); + async function initStateData() { loading(); - const res = await getArticleBySlug(slug); - const data = res?.data?.data; + try { + // 1️⃣ Ambil artikel by slug + const res = await getArticleBySlug(slug); + const data = res?.data?.data; - setThumbnail(data?.thumbnailUrl); - setDiseId(data?.aiArticleId); - setDetailFiles(data?.files); - setArticleDetail(data); // <-- Add this - close(); + if (!data?.id) return; + + setArticleDetail(data); + setThumbnail(data.thumbnailUrl); + setDiseId(data.aiArticleId); + + // 2️⃣ Ambil SEMUA article files + const filesRes = await getArticleFiles(); + const allFiles = filesRes?.data?.data ?? []; + + // 3️⃣ FILTER sesuai articleId + const filteredFiles = allFiles.filter( + (file: any) => file.articleId === data.id + ); + + setDetailFiles(filteredFiles); + } catch (error) { + console.error("Init state detail error:", error); + } finally { + close(); + } } - // if (!articleDetail?.files || articleDetail?.files?.length === 0) { - // return ( - //
- //

Gambar tidak tersedia

- //
- // ); - // } function decodeHtmlString(raw: string = "") { if (!raw) return ""; @@ -395,36 +413,30 @@ export default function DetailContent() {
{/* Gambar utama */} - {articleDetail?.files && articleDetail.files.length > 0 ? ( + {detailFiles.length > 0 ? ( <> - {/* Gambar utama */} -
- { -
+ {detailFiles[selectedIndex]?.fileAlt - {/* Thumbnail */}
- {articleDetail.files.map((file: any, index: number) => ( + {detailFiles.map((file, index) => (