"use client"; import Cookies from "js-cookie"; import Link from "next/link"; import { useEffect, useState } from "react"; import { Article } from "@/types/globals"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; import "react-datepicker/dist/react-datepicker.css"; import { Checkbox } from "@/components/ui/checkbox"; import { Label } from "@/components/ui/label"; import { Calendar } from "@/components/ui/calendar"; import ApexChartColumn from "@/components/main/dashboard/chart/column-chart"; import CustomPagination from "@/components/layout/custom-pagination"; import { motion } from "framer-motion"; import { Input } from "@/components/ui/input"; import { SelectTrigger, SelectValue, SelectContent, SelectItem, Select, } from "@/components/ui/select"; import { Badge } from "lucide-react"; 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 [roleName, setRoleName] = useState(); useEffect(() => { const role = Cookies.get("roleName"); setRoleName(role); }, []); 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 options = [ { label: "Comment", value: "comment" }, { label: "View", value: "view" }, { label: "Share", value: "share" }, ]; 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: "5", // 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; }; if (!roleName) return null; const AdminDashboard = () => { const tasks = [ { id: "1", title: "MediaHUB Content Aggregator", author: "John Kontributor", category: "Product", date: "2026-02-13", status: "OPEN", }, { id: "2", title: "Mudik Nyaman Bersama Pertamina: Layanan 24 Jam, Motoris, dan Fasilitas Lengkap", author: "Jane Kontributor", category: "Service", date: "2026-02-13", status: "OPEN", }, { id: "3", title: "Artifintel Services Update", author: "Alex Approver", category: "Event", date: "2026-02-13", status: "CLOSED", }, ]; return (
{/* HEADER */}

Admin Dashboard

Review and manage content submissions

{/* STAT CARDS */}
{[ { title: "Open Tasks", value: 2, color: "bg-yellow-500" }, { title: "Closed Tasks", value: 2, color: "bg-green-600" }, { title: "Total Submissions", value: 4, color: "bg-blue-600" }, { title: "Rejected", value: 7, color: "bg-red-600" }, ].map((card, i) => (

{card.title}

{card.value}

))}
{/* TASK LIST */}
{/* Title */}

Task List{" "} {tasks.length} Tasks

{/* Filters */}
{/* Accordion List */} {tasks.map((task) => (

{task.title}

{task.author} • {task.category} • {task.date}

{task.status} {/* Mini Progress */}
{/* Title */}

Document Flow Status

{/* Stepper */}
{/* Line */}
{/* STEP 1 */}

Submission

Feb 13, 2026 09:00

{/* STEP 2 */}

Technical Review

Feb 13, 2026 11:00

{/* STEP 3 */}

Admin Verification

Waiting

{/* STEP 4 */}

Final Approval

Waiting

))}
); }; const ContributorDashboard = () => { return (

Dashboard

{/* STAT CARDS */}
{[ { title: "Total Content", value: 24, color: "bg-blue-600", growth: "+12%", }, { title: "Pending Approval", value: 8, color: "bg-yellow-500", growth: "+3", }, { title: "Published", value: 16, color: "bg-green-600", growth: "+5", }, { title: "Rejected", value: 2, color: "bg-red-600", growth: "-1", }, ].map((card, i) => (

{card.title}

{card.value}

{card.growth}

))}
{/* CONTENT + QUICK ACTIONS */}

Recent Content

{/* isi list content di sini */}

Quick Actions

); }; return ( <>{roleName === "Admin" ? : } ); }