"use client"; import Cookies from "js-cookie"; import { useEffect, useState } from "react"; import { Article } from "@/types/globals"; import { getListArticle, getStatisticSummary, getTopArticles, getUserLevelDataStat, } from "@/service/article"; import { Button } from "@/components/ui/button"; import { motion } from "framer-motion"; import { Blocks, Check, CheckCircle, CheckCircle2, Eye, Info, TimerIcon, Upload, } from "lucide-react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { Dialog, DialogClose, DialogContent, DialogFooter, DialogTitle, } from "@/components/ui/dialog"; type ArticleData = Article & { no: number; createdAt: string; }; interface TopPages { id: number; no: number; title: string; viewCount: number; } interface PostCount { userLevelId: number; no: number; userLevelName: string; totalArticle: number; } export default function DashboardContainer() { const username = Cookies.get("username"); const fullname = Cookies.get("ufne"); const [page, setPage] = useState(1); const [totalPage, setTotalPage] = useState(1); const [topPagesTotalPage, setTopPagesTotalPage] = useState(1); const [article, setArticle] = useState([]); // const [analyticsView, setAnalyticView] = useState(["comment", "view", "share"]); // const [startDateValue, setStartDateValue] = useState(parseDate(convertDateFormatNoTimeV2(new Date()))); // const [postContentDate, setPostContentDate] = useState({ // startDate: parseDate(convertDateFormatNoTimeV2(new Date(new Date().setDate(new Date().getDate() - 7)))), // endDate: parseDate(convertDateFormatNoTimeV2(new Date())), // }); const [startDateValue, setStartDateValue] = useState(new Date()); const [analyticsView, setAnalyticView] = useState([]); const [dialogOpen, setDialogOpen] = useState(false); const [selectedItem, setSelectedItem] = useState(null); const options = [ { label: "Comment", value: "comment" }, { label: "View", value: "view" }, { label: "Share", value: "share" }, ]; const activities = [ { no: 1, tanggal: "10/11/2024", jenis: "Banner", judul: "New Promo JAECOO", status: "Menunggu", }, { no: 2, tanggal: "10/11/2024", jenis: "Agen", judul: "Foto Budi Santoso", status: "Disetujui", }, { no: 3, tanggal: "09/11/2024", jenis: "Produk", judul: "JAECOO J7 AWD Update", status: "Disetujui", }, { no: 4, tanggal: "09/11/2024", jenis: "Dealer", judul: "Dealer Jakarta Selatan", status: "Disetujui", }, { no: 5, tanggal: "08/11/2024", jenis: "Dokumen", judul: "Brosur JAECOO J8", status: "Ditolak", }, { no: 6, tanggal: "08/11/2024", jenis: "Banner", judul: "Hero Banner Akhir Tahun", status: "Menunggu", }, ]; const notifications = [ { icon: "✅", text: 'Upload "JAECOO J7 AWD Update" telah disetujui oleh Admin Manager', time: "2 jam yang lalu", }, { icon: "❌", text: 'Upload "Brosur JAECOO J8" ditolak. Alasan: Resolusi gambar terlalu rendah.', time: "2 jam yang lalu", }, { icon: "✅", text: 'Update "Dealer Jakarta Selatan" telah disetujui', time: "1 hari yang lalu", }, { icon: "✅", text: 'Upload "Foto Budi Santoso" telah disetujui', time: "1 hari yang lalu", }, { icon: "ℹ️", text: "Sistem akan maintenance pada Minggu, 12 November 2024 pukul 00.00 - 04.00 WIB", time: "1 hari yang lalu", }, ]; const handleChange = (value: string, checked: boolean) => { if (checked) { setAnalyticView([...analyticsView, value]); } else { setAnalyticView(analyticsView.filter((v) => v !== value)); } }; const [postContentDate, setPostContentDate] = useState({ startDate: new Date(new Date().setDate(new Date().getDate() - 7)), endDate: new Date(), }); const [typeDate, setTypeDate] = useState("monthly"); const [summary, setSummary] = useState(); const [topPages, setTopPages] = useState([]); const [postCount, setPostCount] = useState([]); useEffect(() => { fetchSummary(); }, []); useEffect(() => { initState(); }, [page]); async function initState() { const req = { limit: "4", page: page, search: "", }; const res = await getListArticle(req); setArticle(res.data?.data); setTotalPage(res?.data?.meta?.totalPage); } async function fetchSummary() { const res = await getStatisticSummary(); setSummary(res?.data?.data); } useEffect(() => { fetchTopPages(); }, [page]); async function fetchTopPages() { const req = { limit: "10", page: page, search: "", }; const res = await getTopArticles(req); setTopPages(getTableNumber(10, res.data?.data)); setTopPagesTotalPage(res?.data?.meta?.totalPage); } useEffect(() => { fetchPostCount(); }, [postContentDate]); async function fetchPostCount() { const getDate = (data: any) => { return `${data.year}-${data.month < 10 ? `0${data.month}` : data.month}-${ data.day < 10 ? `0${data.day}` : data.day }`; }; const res = await getUserLevelDataStat( getDate(postContentDate.startDate), getDate(postContentDate.endDate) ); setPostCount(getTableNumber(10, res?.data?.data)); } const getTableNumber = (limit: number, data: any) => { if (data) { const startIndex = limit * (page - 1); let iterate = 0; const newData = data.map((value: any) => { iterate++; value.no = startIndex + iterate; return value; }); return newData; } }; const getMonthYear = (date: any) => { return date.month + " " + date.year; }; const getMonthYearName = (date: any) => { const newDate = new Date(date); const months = [ "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember", ]; const year = newDate.getFullYear(); const month = months[newDate.getMonth()]; return month + " " + year; }; return (

Dashboard Utama

Ringkasan status aktivitas dan upload anda

{/* Stats Cards */}
{/* User Profile Card */}

Total Upload Hari ini

2

{/*

{summary?.totalToday}

2

*/}

Menunggu Persetujuan

2

{/*

{summary?.totalToday}

2

*/}

Disetujui

2

{/*

{summary?.totalToday}

2

*/}

Ditolak

2

{/*

{summary?.totalToday}

2

*/}
{/* Content Section */}
{/* Aktivitas Terakhir */}

Aktivitas Terakhir

No Tanggal Jenis Konten Judul / Nama Status Aksi {activities.map((item) => ( {item.no} {item.tanggal} {item.jenis} {item.judul} {item.status === "Disetujui" && ( Disetujui )} {item.status === "Menunggu" && ( Menunggu )} {item.status === "Ditolak" && ( Ditolak )} { setSelectedItem(item); setDialogOpen(true); }} className="text-blue-600 font-medium text-center cursor-pointer hover:underline" > Lihat ))}
{selectedItem && ( <> {/* Header */}
{selectedItem.judul} {selectedItem.status === "Disetujui" && ( Disetujui )} {selectedItem.status === "Menunggu" && ( Menunggu )} {selectedItem.status === "Ditolak" && ( Ditolak )}
{/* Body */}

Tanggal Upload

{selectedItem.tanggal}

Ukuran File

2.4 MB

Diupload Oleh

Operator1

Waktu Upload

14:32 WIB

Preview Konten

Preview File

File: {selectedItem.judul}.jpg

Deskripsi

Upload {selectedItem.judul}

Status Timeline

Upload Berhasil

10/11/2024 • 14:32 WIB

{selectedItem.status === "Disetujui" && (

Disetujui oleh Approver

10/11/2024 • 16:45 WIB

)}
{/* Footer */} )}
{/* Notifikasi */}

Notifikasi

{notifications.map((notif, i) => (
{notif.icon}

{notif.text}

{notif.time}

))}
{/* Informasi Penting */}

Informasi Penting

Upload yang berstatus "Menunggu" akan direview oleh Approver. Pastikan semua konten sudah sesuai panduan sebelum upload untuk mempercepat proses approval.

); }