"use client"; import { CreateIconIon, DeleteIcon, DotsYIcon, SearchIcon, } from "@/components/icons"; import { close, error, success } from "@/config/swal"; import { deleteArticle } from "@/service/article"; import { getCustomStaticPage } from "@/service/static-page-service"; import { Article } from "@/types/globals"; import Link from "next/link"; import { Key, useCallback, useEffect, useState } from "react"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, } from "@/components/ui/dropdown-menu"; import { Button } from "../ui/button"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Input } from "../ui/input"; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell, } from "@/components/ui/table"; import CustomPagination from "../layout/custom-pagination"; const columns = [ { name: "No", uid: "no" }, { name: "Judul", uid: "title" }, { name: "Slug", uid: "slug" }, { name: "Deskripsi", uid: "description" }, { name: "Aksi", uid: "actions" }, ]; type ArticleData = Article & { no: number; createdAt: string; }; export default function StaticPageTable() { const MySwal = withReactContent(Swal); const [page, setPage] = useState(1); const [totalPage, setTotalPage] = useState(1); const [article, setArticle] = useState([]); const [showData, setShowData] = useState("10"); const [search, setSearch] = useState(""); const [startDateValue] = useState({ startDate: null, endDate: null, }); useEffect(() => { initState(); }, [page, showData, startDateValue]); async function initState() { const req = { limit: showData, page: page, search: search, }; const res = await getCustomStaticPage(req); getTableNumber(parseInt(showData), res.data?.data); console.log("res.data?.data", res.data); setTotalPage(res?.data?.meta?.totalPage); } const getTableNumber = (limit: number, data: Article[]) => { if (data) { const startIndex = limit * (page - 1); let iterate = 0; const newData = data.map((value: any) => { iterate++; value.no = startIndex + iterate; return value; }); console.log("daata", data); setArticle(newData); } }; async function doDelete(id: string) { // loading(); const resDelete = await deleteArticle(id); if (resDelete?.error) { error(resDelete.message); return false; } close(); success("Success Deleted"); } const handleDelete = (id: string) => { MySwal.fire({ title: "Hapus Data", icon: "warning", showCancelButton: true, cancelButtonColor: "#3085d6", confirmButtonColor: "#d33", confirmButtonText: "Hapus", }).then((result) => { if (result.isConfirmed) { doDelete(id); } }); }; // function successSubmit() { // MySwal.fire({ // title: "Sukses", // icon: "success", // confirmButtonColor: "#3085d6", // confirmButtonText: "OK", // }).then((result) => { // if (result.isConfirmed) { // // initStete(); // } // }); // } const renderCell = useCallback((article: ArticleData, columnKey: Key) => { const cellValue = article[columnKey as keyof ArticleData]; switch (columnKey) { case "actions": return (
{/* Detail */} Edit handleDelete(article.id)} className="flex items-center text-red-500" > Delete
); default: return cellValue; } }, []); let typingTimer: NodeJS.Timeout; const doneTypingInterval = 1500; const handleKeyUp = () => { clearTimeout(typingTimer); typingTimer = setTimeout(doneTyping, doneTypingInterval); }; const handleKeyDown = () => { clearTimeout(typingTimer); }; async function doneTyping() { initState(); } return ( <>
setSearch(e.target.value)} onKeyUp={handleKeyUp} onKeyDown={handleKeyDown} />
{/*

Tanggal

setStartDateValue(e)} inputClassName="z-50 w-full text-sm bg-transparent border-1 border-gray-200 px-2 py-[6px] rounded-xl h-[40px] text-gray-600 dark:text-gray-300" />
*/}
{columns.map((column) => ( {column.name} ))} {article.length === 0 ? ( No data to display. ) : ( article.map((item) => ( {columns.map((column) => ( {renderCell(item, column.uid)} ))} )) )}
{/* setPage(page)} /> */} setPage(data)} />
); }