"use client"; import { RouterAdminInvestasi } from "@/app/lib/router_admin/router_admin_investasi"; import { MODEL_INVESTASI } from "@/app_modules/investasi/_lib/interface"; import { Button, Center, Group, Pagination, Paper, ScrollArea, Stack, Table, Text, TextInput, Title, } from "@mantine/core"; import { IconDetails, IconEye, IconEyeCheck, IconInfoCircle, IconSearch } from "@tabler/icons-react"; import _ from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; import { adminInvestasi_funGetAllPublish } from "../fun/get/get_all_publish"; import { ComponentAdminGlobal_TitlePage } from "../../_admin_global/_component"; import { MainColor } from "@/app_modules/_global/color"; import { AccentColor, AdminColor } from "@/app_modules/_global/color/color_pallet"; import { apiGetAdminInvestasiByStatus } from "../_lib/api_fetch_admin_investasi"; import { useShallowEffect } from "@mantine/hooks"; import { clientLogger } from "@/util/clientLogger"; import CustomSkeleton from "@/app_modules/components/CustomSkeleton"; export default function Admin_TablePublishInvestasi() { return ( <> {/* {JSON.stringify(listPublish, null, 2)} */} > ); } function TableView() { const router = useRouter(); const [data, setData] = useState(null); const [nPage, setNPage] = useState(1); const [activePage, setActivePage] = useState(1); const [isSearch, setSearch] = useState(""); const [isLoading, setLoading] = useState(false); const [idData, setIdData] = useState(""); const [origin, setOrigin] = useState(""); useShallowEffect(() => { if (typeof window !== "undefined") { setOrigin(window.location.origin); } }, []) useShallowEffect(() => { const loadInitialData = async () => { try { const response = await apiGetAdminInvestasiByStatus({ status: "Publish", page: `${activePage}`, search: isSearch, }); if (response?.success && response?.data?.data) { setData(response.data.data); setNPage(response.data.nPage || 1); } else { console.error("Invalid data format received:", response); setData([]); } } catch (error) { clientLogger.error("Error get data table publish", error); setData([]); } }; loadInitialData(); }, [activePage, isSearch]); const onSearch = async (searchTerm: string) => { setSearch(searchTerm); setActivePage(1); } const onPageClick = (page: number) => { setActivePage(page) } const renderTableBody = () => { if(!Array.isArray(data) || data.length === 0) { return ( Tidak ada data ); } return data.map((e, i) => ( {e.author.username} {e.title} {_.toNumber(e.progress).toFixed(2)} % {new Intl.NumberFormat("id-ID", { maximumFractionDigits: 10, }).format(+e.sisaLembar)} {new Intl.NumberFormat("id-ID", { maximumFractionDigits: 10, }).format(+e.totalLembar)} {e.Investasi_Invoice.length} } onClick={() => { setIdData(e.id); setLoading(true); router.push(RouterAdminInvestasi.detail_publish + `${e.id}`); }} > Detail )); } return ( <> } radius={"xl"} placeholder={"Cari nama proyek"} onChange={(val) => { onSearch(val.currentTarget.value); }} /> } /> {/* Publish } radius={"xl"} placeholder="Cari nama proyek" onChange={(val) => { onSearch(val.currentTarget.value); }} /> */} {!data ? ( ) : ( Username Nama Proyek Progres Sisa Saham Total Saham Validasi Aksi {renderTableBody()} { onPageClick(val); }} /> )} > ); }
{JSON.stringify(listPublish, null, 2)}