"use client"; import Image from "next/image"; import { Calendar, Clock, Eye } from "lucide-react"; import { Button } from "@/components/ui/button"; import Link from "next/link"; import { useState, useEffect } from "react"; import { FaFacebookF, FaTiktok, FaYoutube, FaWhatsapp, FaInstagram, FaTwitter, FaCheck, FaLink, FaShareAlt, } from "react-icons/fa"; import { getDetail, getArticleDetail } from "@/service/landing/landing"; import VideoPlayer from "@/utils/video-player"; import { toBase64, shimmer } from "@/utils/globals"; import { Skeleton } from "@/components/ui/skeleton"; export default function DocumentDetail({ id }: { id: string }) { const [copied, setCopied] = useState(false); const [showShareMenu, setShowShareMenu] = useState(false); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [selectedDoc, setSelectedDoc] = useState(0); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const timer = setTimeout(() => { setIsLoading(false); }, 3000); return () => clearTimeout(timer); }, []); const handleCopyLink = async () => { try { await navigator.clipboard.writeText(window.location.href); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { console.error("Failed to copy: ", err); } }; const SocialItem = ({ icon, label, }: { icon: React.ReactNode; label: string; }) => (
{icon}
{label}
); useEffect(() => { const fetchDetail = async () => { try { setLoading(true); // Try new Articles API first const response = await getArticleDetail(id); console.log("Article Detail API response:", response); if (response?.error) { console.error("Articles API failed, falling back to old API"); // Fallback to old API const fallbackResponse = await getDetail(id); setData(fallbackResponse?.data?.data); console.log( "doc", fallbackResponse?.data?.data.files[selectedDoc]?.secondaryUrl ); return; } // Handle new API response structure const articleData = response?.data?.data; if (articleData) { // Transform article data to match old structure for backward compatibility const transformedData = { id: articleData.id, title: articleData.title, description: articleData.description, createdAt: articleData.createdAt, clickCount: articleData.viewCount, creatorGroupLevelName: articleData.createdByName || "Unknown", uploadedBy: { publisher: articleData.createdByName || "MABES POLRI" }, files: articleData.files?.map((file: any) => ({ id: file.id, url: file.file_url, fileName: file.file_name, filePath: file.file_path, fileThumbnail: file.file_thumbnail, fileAlt: file.file_alt, widthPixel: file.width_pixel, heightPixel: file.height_pixel, size: file.size, downloadCount: file.download_count, createdAt: file.created_at, updatedAt: file.updated_at, secondaryUrl: file.file_url, // For document files, use same URL ...file })) || [], ...articleData }; setData(transformedData); console.log( "doc", transformedData.files[selectedDoc]?.secondaryUrl ); } } catch (error) { console.error("Error fetching detail:", error); // Try fallback to old API if new API fails try { const fallbackResponse = await getDetail(id); setData(fallbackResponse?.data?.data); console.log( "doc", fallbackResponse?.data?.data.files[selectedDoc]?.secondaryUrl ); } catch (fallbackError) { console.error("Fallback API also failed:", fallbackError); } } finally { setLoading(false); } }; if (id) fetchDetail(); }, [id]); if (loading) { return (

Loading...

); } if (!data) { return (

Data tidak ditemukan

); } return (